Spring AOP

什么是AOP

     AOP(Aspect Oriented Programming 面向切面编程)是一种通过运行期动态代理实现代码复用的机制,是对传统OOP(Object Oriented Programming,面向对象编程 )的补充。目前,Aspectj是Java社区里最完整最流行的AOP框架,在Spring 2.0以上版本中可以通过Aspectj注解或基于XML配置AOP。

AOP的相关术语

Spring AOP

AOP(AspectJ的XML方式)

1、创建web项目,引入jar包(6个基本包+4个aop相关的jar包)

        Spring AOP

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>

 

 

上一篇:Books for computer programmers


下一篇:记录2019年中遇到的问题和解决的方法