Spring AOP
为什么需要AOP?
应用中有N业务逻辑组件,每个业务逻辑组件又有M个方法,应用将一共包含N*M个方法
需要统一为每个方法,都增加一个“通用功能”,如事物处理、日志、权限控制……
一般会定义一个通用方法,然后在其他方法里调用。但是需要打开所有方法进行修改。
AOP:可以实现在不修改原方法代码的前提下统一为原多个方法增加横切性质的“通用处理”
/**********************************************
Spring与Hibernate整合之后,如何使用SQL查询:
HibernateTemplate.execute(new HibernateCallback()
{
public Object xxx(Session sess){
利用sess可以做SQL查询
}
})
**********************************************/
AOP全称:Aspect Orient Programing ,面向切面编程。
是作为面向对象编程(OOP)的补充。
AOP的特征:
- 各步骤之间的良好隔离性。
- 源代码无关性。
AOP的本质:依然要修改所有的方法—只不过这个修改由AOP框架去完成。
AOP框架在什么时候去修改所有的方法?有两个时机:
1. 在编译Java源代码之时 --编译时增强
2. 在运行时,动态地修改类(生成新类) --运行时增强
需要CGLIB或Javassist
对于运行时增强来说,每次运行时都需要额外地动态地进行字节码增强,这就需要额外的开销。
所以编译时增强的AOP框架的性能要更加出色。
AspectJ
1.安装JAR包
2.把aspectjrt.jar添加到CLASSPATH环境变量中
AOP的相关概念:
1. 目标对象 - 程序员自己开发的类、没有修改之前的类所创建的实例
2. AOP代理 - AOP框架修改之后的类,所生成的实例
AOP代理类是由AOP框架所生成的
3. AOP代理的方法 - Advice + 目标方法 + Advice
4. Advice - 通知/建议/增强处理
Spring AOP的配置:
1. 指定在目标方法哪里插入(after/before/around/afterReturning/afterThrowing)
2. 通过execution表达式指定为哪些方法执行插入
3. 指定插入“怎样一段代码“
Spring AOP开发步骤:
1. 定义一个切面Bean(就是一个标准类,没有任何特殊之处)
2. 在bean.xml里对这个切面Bean进行配置(配置Bean)
3. 添加bean.xml配置中的xmlns元素
4. 在bean.xml中配置<aop:config/>