spring aop 整理

aop常见概念

   1、切面

        事务、日志、安全性框架、权限等都是切面(就是类,事务有事务类,日志有日志类,权限有权限类)


   2、通知

      切面中的方法就是通知(类中针对目标方法所要插入的方法,即事务类中执行事务的方法,日志类中执行日志操作的方法)

   3、目标类 (你想要侵入修改的方法所在的类,诸如我们想在查询存款时加入一些其他操作,存款管理类就是目标类)


   4、切入点

         只有符合切入点,才能让通知和目标方法结合在一起 (就是你想要加强的方法,就是查看工资的方法showSalary())

   5、织入:

         形成代理对象的方法的过程


在配置之前要先将一下execution表达式

此表达式的作用是用于指定切入点:


xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:aop="http://www.springframework.org/schema/aop" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
   <bean id="salaryManager" class="cn.itcast.spring.aop.sh.aspects.SalaryManagerImpl"></bean>

	<bean id="logger" class="cn.itcast.spring.aop.sh.aspects.Logger"></bean>
	
	<bean id="security" class="cn.itcast.spring.aop.sh.aspects.Security"></bean>
	
	<bean id="privilege" class="cn.itcast.spring.aop.sh.aspects.Privilege">
		<property name="access" value="afds"></property>
	</bean>
	
	<aop:config>
		<aop:pointcut expression="execution(* cn.itcast.spring.aop.sh.aspects.SalaryManagerImpl.*(..))" id="perform"/>
		<aop:aspect ref="logger">
			<aop:before method="logging" pointcut-ref="perform"/>
		</aop:aspect>
		<aop:aspect ref="security">
			<aop:before method="security" pointcut-ref="perform"/>
		</aop:aspect>
		<aop:aspect ref="privilege">
			<aop:around method="isAccess" pointcut-ref="perform"/>
		</aop:aspect>
	</aop:config>
</beans>


注解配置

首先在配置文件中加入

 <aop:aspectj-autoproxy></aop:aspectj-autoproxy>


springAOP的具体加载步骤:

   1、当spring容器启动的时候,加载了spring的配置文件

   2、为配置文件中所有的bean创建对象

   3、spring容器会解析aop:config的配置

       1、解析切入点表达式,用切入点表达式和纳入spring容器中的bean做匹配

           如果匹配成功,则会为该bean创建代理对象,代理对象的方法=目标方法+通知

            如果匹配不成功,不会创建代理对象

  4、在客户端利用context.getBean获取对象时,如果该对象有代理对象则返回代理对象,如果无代理对象,则返回目标对象

说明:如果目标类没有实现接口,则spring容器会采用cglib的方式产生代理对象,如果实现了接口,会采用jdk的方式



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。