参考文档
http://docs.spring.io/spring/docs/3.0.x/reference/aop.html
http://www.360doc.com/content/10/1215/11/4957029_78291485.shtml
http://yangfei520.blog.51cto.com/1041581/1273069
AOP理解
AOP(Aspect-Oriented Programming)其实是OOP(Object-Oriented Programing)思想的补充和完善。我们知道,OOP引进"抽象"、"封装"、"继承"、"多态"等概念,对万事万物进行抽象和封装,来建立一种对象的层次结构,它强调了一种完整事物的自上而下的关系。但是具体细粒度到每个事物内部的情况,OOP就显得无能为力了。比如日志功能。日志代码往往水平地散布在所有对象层次当中,却与它所散布到的对象的核心功能毫无关系。对于其他很多类似功能,如事务管理、权限控制等也是如此。这导致了大量代码的重复,而不利于各个模块的重用。
而AOP技术则恰恰相反,它利用一种称为"横切"的技术,能够剖解开封装的对象内部,并将那些影响了多个类并且与具体业务无关的公共行为 封装成一个独立的模块(称为切面)。更重要的是,它又能以巧夺天功的妙手将这些剖开的切面复原,不留痕迹的融入核心业务逻辑中。这样,对于日后横切功能的编辑和重用都能够带来极大的方便。
In the Spring Framework, an AOP proxy will be a JDK dynamic proxy or a CGLIB proxy.
1、join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。
2、point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。
3、advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。
4、aspect(方面):point cut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。
5、introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的AOP工具又将其称为
AOP应用
在spring bean文件头中加入命名空间
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
加入spring bean文件内加入AOP注解
采用自动代理模式
<aop:aspectj-autoproxy />
类前加入方面的注解
@Aspect
@Component
public class LogAspect
切入点注解
实例1
@Pointcut("execution(...))")//对应着连接点,一个连接点即具体某一个方法的执行
public void beforeCompute(int number) {
log.debug("input number is:" + number);
//advice code here
}
切入点的定义还包括
@Around,@Before