概念:AOP(Aspect Oriented Programming)是一种面向切面的编程。比如当我们需要在一个已有的系统中添加日志,就需要到各个模块的控制层或是实现层添加代码,这样开发效率极低,并且代码冗余。如果利用AOP,就相当于,在所有的控制层上,划分出一个切面,这个切面定义了日志记录,所有经过控制层的代码,都会通过切面进行日志保存。
实例:
一 在配置文件中配置AOP
<!-- 开启aop -->
<aop:aspectj-autoproxy expose-proxy="true"></aop:aspectj-autoproxy>
<!-- 测试aop -->
<bean id="transactionDemo" class="com.yy.student.test.TransactionDemo"></bean>
<aop:config>
<aop:pointcut expression="execution(* com.yy.student.service.*.*(..))" id="p1" /> //execution定义了切面拦截的地方,特别注意*号后面有一个空格
<aop:aspect ref = "transactionDemo">
<aop:before method="startTransaction" pointcut-ref="p1" /> //前置方法
<aop:after-returning method="commitTransaction" pointcut-ref="p1"/> //后置方法
</aop:aspect>
</aop:config>
二 添加切面代码
public class TransactionDemo {
//前置
public void startTransaction(){
System.out.println("=======前置代码========");
}
//后置
public void commitTransaction(){
System.out.println("=======后置代码========");
}
}
三 xml文件加入aop
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
配置结束就可以测试啦,如果测试不成功,可以参考下面的方法:
Spring启动时会先加载Spring-mvc的配置文件,再加载Spring的配置文件,如果你的AOP配置拦截service层,那么如果写到Speing-mvc的配置文件中,是不起作用的。Spring-mvc配置文件只扫描控制层,而service层没有被注册,所以此时配置的AOP是无效的。
如果这样也没有解决,那么百度吧