`
Irving_wei
  • 浏览: 132642 次
  • 性别: Icon_minigender_1
  • 来自: Heaven
社区版块
存档分类
最新评论
阅读更多

   AOP,面向切面编程,Spring的AOP比我们自己去手动写程序实现要简单得多。因为这种方式生成的代理是由IoC容器全权负责的,我们只要进行了适当的配置之后,就可以去生成一个代理的对象了。当然,配置XML花费的时间也不少。

在Spring中创建AOP对象,我们需要关注的目标只有四个:目标Bean,Advice,PiontCut和最终的AOP代理对象。

   目标Bean,即我们对接口的实现类,它包含了对接口的方法的实现,是我们程序中所谓的“核心代码”,我们在Spring中运用AOP,最终的目的就是要让核心代码和切面方法(验证,日志之类的方法)进行分离,尽量把切面方法放到一起进行统一的管理。可想而知,目标Bean是需要在applicationContext.xml中注入的。

   Advice,通常称之为“增强”,也就是进行的额外操作。可以在某个连接点上被执行,但是它并不能自己决定拦截哪一个方法,这是由PointCut来负责的。它是上面所说的从核心代码周围分离出来的切面方法的一个统称。我们为每一种增强方法写好一个类以后,将它以普通Bean的方式注入到IoC中。常用到了Advice有4种:MethodBeforeAdvice,在一个方法执行前开始增强;AfterReturningAdvice,在一个方法执行完毕之后增强;ThrowsAdvice,在一个方法执行抛出异常的时候增强;MethodInterceptor,在一个方法执行前后增强。MethodInterceptor的功能最强,它可以实现前面三种所有的功能。

   接下来的工作就是要进行代理的配置了,Spring中提供了ProxyFactoryBean来实现AOP的装配,它是一个工厂Bean,因此它返回的对象是封装了目标Bean对象和Advice的一个AOP代理。如下面的代码:

 

<!-- 注入目标方法 -->
  <bean id="userServiceTarget"
  class="com.bingo.irving.UserServiceImpl">
  <property name="userDao">
   <bean class="com.bingo.irving.UserDao"></bean>
  </property>
 </bean>
  

 <!-- 定义MethodBeforeAdvice 即切面方法-->
 <bean id="loginMethodBeforeAdvice"
  class="com.bingo.irving.LoginMethodBeforeAdvice">
 </bean>
 <bean id="loginAfterReturnAdvice"
       class="com.bingo.irving.LoginAfterReturningAdvice">
 </bean>
 <bean id="loginThrowsAdvice"
       class="com.bingo.irving.LoginThrowsAdvice">
  </bean>


 <!--配置AOP-->

 <!-- 配置代理 -->
 <bean id="userService"
  class="org.springframework.aop.framework.ProxyFactoryBean">
  
  <!-- 注入目标对象 -->
  <property name="target" ref="userServiceTarget">
   
  </property>
  <!-- 注入Advice/Interceptor,即注入这个代理所对应的切面方法 -->
  <property name="interceptorNames">
   <list>
    <value>loginMethodBeforeAdvice</value>
    <value>loginAfterReturnAdvice</value>
    <value>loginThrowsAdvice</value>
   </list>

  </property>
 </bean>

PiontCut可以决定一个Advice是对应拦截哪个或者哪一类的目标Bean,在注入了Advice之后,加上Advisor的注入,它包含了一个Advice,并且定义了如何将Advice织入到目标对象。最重要的Advisor就是PointcutAdvisor。它包含了一个Advice和一个Pointcut,Pointcut判断方法是否符合设定的条件,要是符合就执行相应的Advice,因此,我们可以通过Pointcut来决定切面该作用于哪些方面。


 <!-- 设置Advisor,即设置Pointcut,限制这个advice是对哪个或者哪些方法进行增强 -->
 <bean id="loginAfterReturningAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
 <property name="mappedName" value="login"/>
 <property name="advice" ref="loginAfterReturningAdvice" />
 </bean>

 

<bean id="loginMethodBeforeAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
 <property name="pattern" value=".*login"/>
 <property name="advice" ref="loginMethodBeforeAdvice"/> 
 </bean>

   这样,我们在主函数里面调用接口的代理的时候,返回的代理就包含了一连串的拦截器,会自动在运行方法的时候调用拦截器,实现了核心代码和切面代码相分离的目的。

 

分享到:
评论

相关推荐

    spring aop spring aop

    在给出的XML配置中,`&lt;aop:config&gt;`元素开启AOP支持,而`&lt;aop:aspect&gt;`元素用于定义切面,其内部通过`&lt;aop:pointcut&gt;`定义切点,并通过`&lt;aop:before&gt;`和`&lt;aop:after&gt;`指定通知。 为了使用这些配置,我们需要在代码...

    spring-aop.jar各个版本

    spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...

    aopalliance-1.0.jar及aopalliance源码

    **AOP Alliance简介** AOP Alliance是一个开源项目,它的全称是Aspect Oriented Programming(面向切面编程)Alliance,是Java平台上的一个接口集合,为面向切面编程的实现提供了一个统一的API。这个库的主要目的是...

    aop所依赖的所有包

    AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在减少代码的重复性和增强可维护性,特别是在处理系统中的横切关注点时。这些关注点,如日志、事务管理、安全检查等,往往分散在系统的各个部分...

    spring-boot aop

    Spring Boot AOP(面向切面编程)是一种强大的设计模式,它允许我们在不修改现有代码的情况下,插入额外的功能或监控代码。在Spring框架中,AOP主要用于日志记录、事务管理、性能统计等场景。本示例是关于如何在...

    开发工具 aopalliance-1.0

    开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具 aopalliance-1.0开发工具...

    AOP@Work AOP 工具比较

    面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在通过将关注点分离,提高软件的模块化程度。AOP的核心是切面,它封装了横切关注点,如日志、事务管理、性能监控等,使得这些功能可以独立于主...

    aopalliance最新完整jar包

    在Java应用中,aopalliance.jar包扮演着至关重要的角色,它包含了一些核心接口,如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.aop.Advice`,这些接口定义了拦截器和通知的概念,它们是AOP的...

    aop开发环境jar包

    在IT行业中,AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它旨在提高软件的模块化程度,将关注点分离。在Java世界里,AOP常用于处理日志、事务管理、权限检查等横切关注点。当我们谈到“AOP...

    spring aop jar 包

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。这个"spring aop jar 包"包含了实现这一功能所需的类和接口,...

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    面向切面编程(AOP)是一种编程范式,旨在将横切关注点(如日志、安全等)与业务逻辑分离,从而提高模块化。AOP通过预定义的“切面”对横切关注点进行模块化,从而可以在不修改业务逻辑代码的情况下增加新功能。动态...

    aopalliance

    它定义了一些基础的AOP接口,如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.aop.Advice`,这些接口被广泛应用于诸如AspectJ、Spring AOP等AOP框架中。 二、AOPAlliance在Spring 2.0中的作用 ...

    Spring使用AOP的三个jar包

    最后,`aopalliance-1.0.0.jar`是AOP联盟提供的一个接口库,它定义了一些通用的AOP接口,比如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.intercept.MethodInvocation`,使得不同的AOP框架...

    Spring AOP面向方面编程原理:AOP概念

    ### Spring AOP面向方面编程原理:AOP概念详解 #### 一、引言 随着软件系统的日益复杂,传统的面向对象编程(OOP)逐渐暴露出难以应对某些横切关注点(cross-cutting concerns)的问题。为了解决这一挑战,面向方面编程...

    简单spring aop 例子

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...

    spring-aop-jar

    在IT领域,Spring框架是一个广泛使用的Java应用框架,它提供了许多功能,包括依赖注入、面向切面编程(AOP)等。"spring-aop-jar"这个主题涉及到Spring框架中的核心组件之一——Spring AOP。这里我们将深入探讨...

    aopalliance-white-paper(AOP Alliance白皮书)

    ### AOP Alliance 白皮书核心知识点解析 #### 一、引言 AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,它旨在通过将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,提高系统的...

    开发工具 spring-aop-4.3.6.RELEASE

    开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE...

    基于注解实现SpringAop

    基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop

    springAOP所依赖的jar包

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许程序员定义“切面”,这些切面可以封装跨越多个对象的行为或责任。在Java应用中实现AOP通常需要依赖于一些外部库,这些库在你提供的标题和描述中有所...

Global site tag (gtag.js) - Google Analytics