什么是AOP
AOP(Aspect Oriented Programming 面向切面编程)是一种通过运行期动态代理实现代码复用的机制,是对传统OOP(Object Oriented Programming,面向对象编程 )的补充。目前,Aspectj是Java社区里最完整最流行的AOP框架,在Spring 2.0以上版本中可以通过Aspectj注解或基于XML配置AOP。
AOP的相关术语
AOP(AspectJ的XML方式)
1、创建web项目,引入jar包(6个基本包+4个aop相关的jar包)
2、在namespace中引入Spring的配置文件
3、通过AOP的配置实现代理对象
<!-- 配置目标对象,即被增强的对象 -->
<bean id="userDao" class="com.zzu.spring.demo1.UserDao"></bean>
<!-- 将切面类交给Spring管理 -->
<bean id="aspect" class="com.zzu.spring.demo1.AspectXML"></bean>
<!-- 通过对AOP的配置完成对目标类产生代理 -->
<aop:config>
<!-- 表达式配置哪些类的哪些方法需要进行增强 -->
<aop:pointcut expression="execution(* com.zzu.spring.demo1.UserDao.add(..))" id="pointcut1"/>
<!-- 配置切面 -->
<aop:aspect ref="aspect">
<aop:before method="checkPro" pointcut-ref="pointcut1"/>
</aop:aspect>
</aop:config>
Spring中的通知类型
前置通知:在目标方法执行之前进行操
后置通知: 在目标方法执行之后进行操作,可以获得方法的返回值
环绕通知:在目标方法执行之前和执行之后进行操作,可以阻止目标方法的执行
异常抛出通知:在程序出现异常的时候进行的操作
最终通知:无论代码是否有异常,总是会执行
<aop:config>
<!-- 表达式配置哪些类的哪些方法需要进行增强 -->
<aop:pointcut expression="execution(* com.zzu.spring.demo1.UserDao.add(..))" id="pointcut1"/>
<aop:pointcut expression="execution(* com.zzu.spring.demo1.UserDao.delete(..))" id="pointcut2"/>
<aop:pointcut expression="execution(* com.zzu.spring.demo1.UserDao.update(..))" id="pointcut3"/>
<aop:pointcut expression="execution(* com.zzu.spring.demo1.UserDao.find(..))" id="pointcut4"/>
<!-- 配置切面 -->
<aop:aspect ref="aspect">
<!--前置通知 -->
<aop:before method="checkPro" pointcut-ref="pointcut1"/>
<!--后置通知 -->
<aop:after-returning method="writelog" pointcut-ref="pointcut2" returning="result"/>
<!-- 环绕通知 -->
<aop:around method="around" pointcut-ref="pointcut3"/>
<!-- 异常抛出通知 -->
<aop:after-throwing method="afterThrowing" pointcut-ref="pointcut4" throwing="ex"/>
<aop:after method="after" pointcut-ref="pointcut4"/>
</aop:aspect>
</aop:config>