aop

AOP(Aspect-Oriented Programming,面向方面编程):解决非业务逻辑功能的实现。

 

AOP是OOP的延续,利用AOP可以对将日志记录,性能统计,安全控制,事务处理,异常处理,跟踪,性能的优化,和监

 

控,持久化,资源池,如数据库连接池的管理系统统一的认证、权限管理等应用系统的异常捕捉及处理,针对具体行业应用

 

的横切行为,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。通

 

过这种机制可以将业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时

 

提高了开发的效率。 

  

1、关注点
1)核心关注点(OOP):关注系统的业务逻辑
2)横切关注点(AOP):关注系统级服务,比如事务、安全、日志
2、方面(Aspect):将散落在各处的代码规整到一处形成一个模块,这个模块称为方面。
3、连接点(Joinpoint):程序执行过程中的某一点,比如方法的调用、异常的抛出。
4、增强(Advice):为某个目标对象增加额外的功能,在spring中增强是通过拦截器实现的。
1)前增强拦截器:在目标对象方法执行之前执行的拦截器。
实现的接口:MethodBeforeAdvice
<!-- 目标对象 -->
<bean name="target" class="com.briup.aop.OrderServiceImpl"></bean>
<!-- 拦截器对象 -->
<bean name="advice" class="com.briup.aop.before.LoggerBeforeAdvice"></bean>
<!-- 创建目标对象的代理对象,注意在调用时调用的是代理对象,而不是目标对象 --
>
<bean name="proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 注入目标对象 -->
<property name="target">
<ref bean="target"/>
</property>
<!-- 注入拦截器的名字,而不是拦截器对象 -->
<property name="interceptorNames">
<list>
<value>advice</value>
</list>
</property>
<!-- 注入代理对象需要实现的接口名称 -->
<property name="proxyInterfaces">
<list>
<value>com.briup.aop.IOrderService</value>
</list>
</property>
</bean>
2)后增强拦截器:在目标对象方法执行之后执行的拦截器。
实 抪_______现的接口:AfterReturningAdvice
3)环绕增强拦截器:在目标对象方法执行之前和之后都执行的拦截器。
实现的接口:MethodInterceptor
4)抛出增强拦截器:在目标对象方法执行时抛出异常才执行的拦截器。
实现的接口:ThrowsAdvice
5、切入点(Pointcut):一组连接点,如果有选择性的拦截目标对象中的方法的话需要定义切
入点。
为拦截器(advice)定义切入点从而产生增强器(advidor):
org.springframework.aop.support.RegexpMethodPointcutAdvisor
<!-- 拦截器:拦截目标对象的所有方法 -->
<bean name="advice" class="com.briup.aop.before.LoggerBeforeAdvice"></bean>
<!-- 增强器:拦截目标对象的部分方法 -->
<bean name="advisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref bean="advice"/>
</property>
<property name="patterns">
<list>
<!-- .:通配一个字符(任意字符);*:通配前一个字符若干次 -->
<value>.*save</value>
<value>.*find</value>
</list>
</property>
</bean>
6、目标对象(Target Object):需要被增强功能的对象称之为目标对象,也被称为被增强或被
代理对象。
7、代理对象(Proxy Object):为目标对象增加额外功能之后产成的新的对象,主要负责调用
拦截器和目标对象。
1)产生代理对象的两种机制:
1.java中的动态代理:产生代理对象需要和目标对象实现共同接口;
2.第三方的cglib库:产生的代理对象是目标对象的子类对象。
2)Spring提供的专门用来产生代理对象的类:
org.springframework.aop.framework.ProxyFactoryBean
3)自动代理:不需要写配置信息就能产生代理对象
1. org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator
特点: a. 只能注入增强器,对拦截器不起作用
b. 不灵活:代理配置文件中所有的目标对象
2. org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator
特点: a. 对拦截器、增强器都起作用
b. 灵活:可选择性的代理配置文件中的目标对象
8、织入(Weaving):为目标对象增加额外功能从而产生代理对象的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值