简介
sping aop 是基于代理方式实现的,运行时编织的aop框架。spring aop 2.0 为用户自定aspect引入了更简单但更强大的方式,同时支持schema-based的方式和@AspectJ anotation风格。 spring aop 2.0还保持了向下兼容性,完全支持aop 1.2的使用方式和底层的aop api。
spring aop相关概念和一般意义上的aop保持一致。
aspect
横切多个业务类的功能,一般是日志,事务等。在spring aop中是一个POJO或者带有@AspectJ标注的POJO
joint point
程序执行中的某个点,在spring aop中只有method的运行时
advice
和某个joint point关联的动作,分before, after returning, after throwing, after, around
pointcut
joint point谓词
AOP proxy
spring aop 2.0对接口风格的对象使用JDK动态代理,对没有接口的对象使用CGLIB。强制spring使用CGLIB的方式是
<aop:config proxy-target-class="true">
<!-- other beans defined here... -->
</aop:config>
在spring 3.2之后的版本不需要额外引入cglib.jar
需要注意的是,如果对象实现了接口,而没有使用强制使用CGLIB的话,spring的动态代理实现了所有的接口,ctx.getBean(#id)
只能强制转换为某个接口,如果强制转换为class类型,会报类型错误(包括@Autowired
和@Resource
方式实现的)