定义
aop,面向切面编程。开发工作中,我们往往只想关注业务需求的逻辑实现,但是我们也需要了解系统的性能、日记记录等等,但是如果每次都在实现业务的地方加入记录性能的实现,这样就大大的耦合了业务逻辑实现和框架实现。 为此aop的目的是将与业务逻辑无关的需求分离开来独立实现,可以用来实现日志记录、性能统计、安全控制、事务处理等模块。主要原理是拦截器和反射。
使用方法
引用springMVC 3.2.3.RELEASE包
1 2 3 4 5 6 7 8 9 10 11 12
| <!-- AspectJ --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.1</version> </dependency> <!-- 方式一实现的时候并未报错 后面研究一下--> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.1</version> </dependency>
|
方式一:基于注解的aop实现
1 2 3 4 5
| <mvc:annotation-driven /> <context:component-scan base-package="com.yyy.web.mess.aop"/>
<aop:aspectj-autoproxy proxy-target-class="false" />
|
对应的java 实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package com.yyy.web.mess.aop;
import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component;
@Component @Aspect public class AopTest { @After("execution(* com.yyy.web.mess.controller.AopController.*(..))") public void afterDo(){ System.out.println("controller aop!"); }
}
|
基于配置文件的实现
1 2 3 4 5 6 7 8 9 10
| <aop:aspectj-autoproxy proxy-target-class="false" /> //将对应的aop注入到框架中 <beans:bean id="aoptest" class="com.yyy.web.mess.aop.AopTest"></beans:bean> <aop:config> <aop:aspect id="after" ref="aoptest"> <aop:pointcut id="pointcut" expression="execution(* com.yyy.web.mess.controller.AopController.*(..) )" /> <aop:around pointcut-ref="pointcut" method="afterDo"/> </aop:aspect> </aop:config>
|
对应的java实现,无注解
1 2 3 4 5 6
| public class AopTest {
public void afterDo(){ System.out.println("controller aop!"); } }
|