`
Irving_wei
  • 浏览: 130489 次
  • 性别: 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

    spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop

    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

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

    开发工具 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

    aop所依赖的所有包

    aop所依赖的所有包+文档+源码,最新版全套aop aspectjweaver aopalliance aspects aspectjrt

    aop例子aop例子

    自己写的aop代理spring

    AOP使用CGLIB实现AOP功能

    Spring AOP实现方法之一:CGLIB 实现AOP功能

    spring aop jar 包

    spring aop jar 包

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

    AOP的意思就是面向切面编程。本文主要是通过梳理JDK中自带的反射机制,实现 AOP动态代理模式,这也是Spring AOP 的实现原理

    android aop

    自己写的android aop的例子 可以说明在android开发中如何使用aop编码的

    spring-boot aop

    源代码是spring-boot添加aop切面功能的demo,简单易懂.

    AOP@Work AOP 工具比较

    概述 AOP 工具当前的技术状况,比较对于该技术而言最成熟的一些方法:AspectJ、AspectWerkz、JBoss AOP、和 Spring AOP,并对比与每种方法的采用有关的问题。

    spring-aop实例

    spring aop

    Spring aop 之 静态代理 动态代理 Aspectj aop-config 等实现方式

    主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...

    AOP联盟:aopalliance.jar API包

    AOP联盟:aopalliance.jar API包a set of AOP Java interface .

    Spring_aop源码

    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象...

    Spring AOP 16道面试题及答案.docx

    描述一下Spring AOP? 在Spring AOP中关注点(concern)和横切关注点(cross-cutting concern)有什么不同? AOP有哪些可用的实现? Spring中有哪些不同的通知类型(advice types)? Spring AOP 代理是什么? 引介...

    spring aop 自定义注解保存操作日志到mysql数据库 源码

    3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑...

    spring-aop-5.2.0.RELEASE-API文档-中文版.zip

    赠送jar包:spring-aop-5.2.0.RELEASE.jar; 赠送原API文档:spring-aop-5.2.0.RELEASE-javadoc.jar; 赠送源代码:spring-aop-5.2.0.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.2.0.RELEASE.pom;...

Global site tag (gtag.js) - Google Analytics