个人笔记6

来源:互联网 发布:2014matlab中对角矩阵 编辑:程序博客网 时间:2024/06/01 23:38

2017-09-29 spring aop配置文件中的<aop:advisor><aop:aspect>有什么区别?

<aop:aspect>”实际上是定义横切逻辑,就是在连接点上做什么,“<aop:advisor>”则定义了在哪些连接点应用什么<aop:aspect>。Spring这样做的好处就是可以让多个横切逻辑(即<aop:aspect>定义的)多次使用,提供可重用性。 



2017-10-10 ssm框架的注解和扫包在spring和springmvc的配置区分。

注解:<mvc:annotation-driven/>,是为了给各层参数配置用的,和bean注入没关系。放在springmvc中配置。
扫包:<context:component-scan base-package="com.*"></context:component-scan> 实现spring的bean 注入。在spring和springmvc中分别配置。按照模块化思想对controller层和service,dao层分开注入。
spring配置用来实现注入,数据源,事物,aop,引入别的配置文件,属性文件,缓存等。
springmvc依附于spring的配置,主要针对页面进行配置,比如解析请求,设置上传下载文件,json解析,中文乱码,日期转换等。
spring 和springmvc扫包的配置区分:
spring中自动扫描(自动注入所有的service和action)

<context:component-scan base-package="com.zhanglf.**.service;com.zhanglf.**.cache;com.zhanglf.**.action"><!--不去识别@Controler的注解-->    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan>

springmvc中自动扫描(扫描controller包下的所有类,使其认为springmvc的控制器)

<context:component-scan base-package="com.zhanglf.**.controller"><!--定义识别@Controler的注解-->    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>    <!--定义不识别@Service的注解,即分层明确,不能在controller层有@Service注解存在,存在也不去识别,这样注入就会失败,启动报错!-->    <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/></context:component-scan>



2017-10-11 用拦截器进行接口安全校验两种方式aop, interceptor的原理区分。

aop: aop拦截的是类/类所在的包的路径。比如com.zhanglf.api这个包下的所有类。可以指定aop拦截该包下所有类的使用。
interceptor:只针对request请求的url路径进行拦截。而不是拦截包路径。是http请求的路径。比如http://localhost:8081/InterceptorProject/log/show这个url,拦截path=”log/show”就会拦截上面这个url.拦截即先走拦截器,拦截器返回true时才走请求路径对应的controller方法。



2017-10-19 在sql的查询结果中新增一个标记列,用于联表查询时可以根据这个列是否有值来判断主表是否具备某个特性。

    需求背景是这样的:每生成一个保单都有字段——客户号,而且如果一个客户购买多个保单,这几个保单的客户号则是同一个值,代表是同一个人买的保单。保单都有固定的流程,当保单表的承保时间有值时,代表此保单开始承保。而只有这个人最先承保的保单称为新单,其余剩下的都不叫新单。现需求是判断每个保单是不是新单?

解决思路:先通过客户号将保单分组,然后找到分组后的最小时间对应的保单号(每个保单都有唯一的保单号,相互区分)生成一个新单集合。然后和保单表的每个保单左联查询,这时就用到标记列,标记列是生成新单集合后多添加一列常数列——XINDAN。新单集合如下:
这里写图片描述
对应sql如下:

select p.contnum as contno,p.cscsigndate,case when xindan=666 then '是' else '否' end as xdfrom pcont p left join(select pcc.managecom,pcc.contno,666 as xindan from pcont pcc,(select custnum,min(cscsigndate) as mindate from pcont where cscsigndate is not null group by custnum)p_tem  where pcc.custnum=p_tem.custnum and pcc.cscsigndate=p_tem.cscsigndate)pcoon pco.managecom=p.managecom and pco.contnum=p.contnum

这样通过判断另外加上一行标记列xindan是否为值666就可以确定每张保单是不是新单了,运行结果如下。
这里写图片描述



2017-10-27 虚拟机的程序计数器的理解——程序计数器(Program Counter Register)
程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。啥意思呢?我们知道,CPU的计算时间是以分片的方式给到每个线程的(换句话说,所谓的并行其实本质上还是串行),比如线程A执行到了一个地方,CPU将控制权给了线程B,那么线程A重新获得CPU的资源时,如何恢复到刚才执行的地方呢?这就是程序计数器要干的事了!它能帮助线程A找到刚刚执行的地方,从而继续刚刚的执行。
  为了线程切换后能恢复到正确的执行位置,每个线程都需要有一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储。所以程序计数器是线程私有的。
  另外,程序计数器是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。
  

2017-11-04 sqlserver中的union和union all的区别

如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。

union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
union all 和or的用法类似。



2017-11-13 解决maven达成jar包时报错:解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.

一般这个环境问题出现在eclips开发工具中,window->Preference->Java->Installed JREs->Edit 选择一个jdk,添加 -Dmaven.multiModuleProjectDirectory=$M2_HOME
这里写图片描述



2017-11-13 maven工程打包成jar和运行。
1.先看如何生成jar包:pom.xml——run as——选择第二个 Maven build…

这里写图片描述

在弹出框输入clean package (打包命令),选择skip Tests(跳过测试),点击finish

这里写图片描述
控制台显示执行命令日志:
这里写图片描述
这就打好jar包,我们刷新target目录,就会发现生成的jar包,copy出去就行了。如下图这里写图片描述
2.运行jar包
我们用过命令行进入到jar包做在目录,输入运行命令:java -jar jar包名
这时如果出现这种报错信息:找不到或者无法加载主类,就要在pom.xml文件中配置主入口的信息。
这里写图片描述

    <build>        <finalName>springboot_mysql_sqlserver</finalName>        <!-- 设置打jar包后的程序主入口 -->        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-shade-plugin</artifactId>                <executions>                    <execution>                        <phase>package</phase>                        <goals>                            <goal>shade</goal>                        </goals>                        <configuration>                            <transformers>                                <transformer                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">                                    <mainClass>com.zhanglf.cn.Application</mainClass>                                </transformer>                            </transformers>                        </configuration>                    </execution>                </executions>            </plugin>        </plugins>    </build>

然后正常启动即可。

原创粉丝点击