`
wj_126mail
  • 浏览: 130665 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
AOP基础 : http://wayfarer.cnblogs.com/articles/241024.html

实现AOP的技术,主要分为两大类:
一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

然而殊途同归,实现AOP的技术特性却是相同的,分别为:
1、join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。
2、point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。
3、advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。包括前置通知,后置通知,环绕通知,
4、aspect(方面):point cut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。
5、introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的AOP工具又将其称为mixin。

上述的技术特性组成了基本的AOP技术,大多数AOP工具均实现了这些技术。它们也可以是研究AOP技术的基本术语。

AOP有些特有的概念,如:advisor、advice和pointcut等等,使用或配置起来有点绕,让人感觉有些距离感,其实它的实现就是一组标准的设计模式的组合使用:Factory、Proxy、Chain of Responsibility,只要搞清楚这几个设计模式,读AOP的源码是比较容易的。

spring AOP配置中,可以通过三种方式配置:在 Spring AOP 第一代中, AOP 的 Advice 必须实现特定接口,而配置设置依赖于 XML 的繁琐设置。在 Spring2.0 之后,对于 AOP 功能的实现与设置新增了两种方法:一种是基于 XML Schema 的设置;一种是基于 Annotation 的支持。两种方式对于 AOP 在使用上的简化都有极大地帮助。

一是基于Spring API的配置文件,基于sprint API的方式时,advice类必须implements MethodInterceptor, AfterAdvice等接口。
二是使用Spring 2.0基于XML Schema的AOP设置方式,此种方式您必须在XML设档的开头加入AOP的names,此种方式advice无须实现implements MethodInterceptor, AfterAdvice等接口。
三是基于Annotation的AOP设置方式,此种方式在XML中必须配置<aop:aspectj-autoproxy/>,此种方式advice无须实现implements MethodInterceptor, AfterAdvice等接口。



配置方法一: 使用代理工厂的方式配置
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 

<beans> 
<bean id="beforeAdvice" class="com.dragon.Advice.BeforeAdvice"></bean> 
<bean id="afterAdvice" class="com.dragon.Advice.AfterAdvice"></bean> 
<bean id="compareInterceptor" class="com.dragon.Advice.CompareInterceptor"></bean> 
<bean id="studenttarget" class="com.dragon.study.Impl.StudentImpl"></bean> 

<bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean"> 
  <property name="proxyInterfaces"> 
    <value>com.dragon.study.IStudent</value> 
  </property> 
  <property name="interceptorNames"> 
    <list> 
     <value>beforeAdvice</value> 
     <value>afterAdvice</value> 
    <value>compareInterceptor</value>  
    </list> 
  </property> 
  <property name="target"> 
    <ref bean="studenttarget"/> 
  </property> 
</bean> 
</beans> 
ApplicationContext ctx =  new FileSystemXmlApplicationContext("/com/dragon/applicationContext.xml"); 
IStudent person = (IStudent)ctx.getBean("student"); 
person.addStudent("dragon"); 

配置方法二:使用advisor的方式配置
<beans>  
<bean id="log" class="com.gc.action.LogAround"/>  
<bean id="timeBook" class="com.gc.action.TimeBook"/>  
<!--代理目标类的指定方法-->  
<bean id="logAdvisor"class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">   
        <property name="advice">   
            <ref bean="log"/>   
        </property>   
               <!--指定要代理的方法-->  
        <property name="patterns">   
            <value>.*doAuditing.* </value>   
        </property>   
    </bean>  
<!--设定代理类-->  
<bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean">   
        <property name="proxyInterfaces">   
            <value>com.gc.impl.TimeBookInterface</value>  
        </property>  
        <property name="target">  
            <ref bean="timeBook"/>  
        </property>  
        <property name="interceptorNames">  
            <list>  
                <value>logAdvisor</value>  
            </list>  
        </property>  
    </bean>  
</beans>  


配置方法三: 基于XML Schema的AOP设置方式
<bean id="userManager" class="cn.com.manager.UserManagerImpl"></bean>  
<bean id="securitHandler" class="cn.com.aop.SecurityHandler"></bean>  
<aop:config>  
<!-- 面相当于拦截器中的通知 -->
<aop:aspect ref="securitHandler"> 
<!-- 对所有的类以add开头的任何方法使用该方法。相当于拦截器中的目标 -->  
<aop:pointcut id="poicut" expression="execution(* add*(..))" /> 
<!-- method 指出before要调用的方法 指定在接入点处调用的面的方法,如果securitHandler 继承 mothdBefore可不这样写-->  
<aop:before method="check" pointcut ref="poicut"/>  
</aop:aspect>  
</aop:config> 

    <!-- 加入aop名称空间后,就可以使用spring2.0的标签aop了 -->
    <bean id="logBeforeAdvise" class="AOP2Schema.LogBeforeAdvice"/>
    <bean id="helloSpeaker" class="AOP2Schema.HelloSpeaker"/>
    <aop:config>
       <aop:aspect id="logging" ref="logBeforeAdvise">
          <aop:before pointcut="execution(* AOP2Schema.ISpeaker.* (..))" method="before"/>
       </aop:aspect>
    </aop:config>




配置方式四:基于Annotation的AOP设置方式
@Aspect
public class LogBeforeAdvice {
    @Pointcut("execution(* com.edu.cug.IHello.*(..)) ")
    public void anymethod(){}
    @Before("anymethod()")
    public void before(JoinPoint joinPoint) {
       System.out.println(joinPoint.getSignature().getName()
              + ",start.............LogBeforeAdvice");
    }
}
分享到:
评论

相关推荐

    spring ioc和aop原理流程图(详细)

    Spring 框架是Java开发中的核心框架,它主要由两个关键部分组成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。这两个概念是Spring框架的核心特性,极大地简化了企业...

    代理机制及AOP原理实现

    本文将深入探讨这两个主题,并结合JDK的反射和CGLIB库来阐述其实现原理。 首先,我们来看动态代理。动态代理是Java提供的一种在运行时创建代理对象的技术,它允许我们在不修改原有代码的情况下,为已有接口添加额外...

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

    ### Spring AOP面向方面编程原理:AOP概念详解 #### 一、引言 随着软件系统的日益复杂,传统的面向对象编程(OOP)...对于希望深入了解Spring AOP原理与实践的读者来说,掌握以上概念将是开启面向方面编程之旅的第一步。

    aop原理使用demo

    本"AOP原理使用demo"是针对AOP编程的一个实例展示,通过这个示例,我们可以深入理解AOP的核心概念和在实际应用中的使用方式。以下是对AOP关键概念的详细解释: 1. **切面(Aspect)**:切面是AOP的核心,它封装了横...

    spring aop 原理解析

    【Spring AOP 原理解析】 Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许开发者定义“切面”来封装系统中的交叉关注点,如日志、事务管理、安全性等,从而提高代码的可复用性和可维护性。在Spring ...

    代理模式与动态代理--Spring AOP原理.doc

    代理模式与动态代理--Spring AOP原理.doc

    使用动态代理演示Spring的AOP编程原理

    为了说明Spring的AOP原理,本人使用代理模式中的动态代理完成演示AOP编程的原理的演示。相信,如果你耐心看完整个程序(几乎一行注释一行代码),那么你对Spring这个东西就不是觉得有什么神秘了! 阅读对象:凡是喜爱...

    aop.zip_884AOP_java aop原理_javaaop原理

    Java AOP(面向切面编程)是软件设计中的一个重要概念,它允许程序员定义“切面”,这些切面封装了特定的、与业务逻辑不直接相关的关注点,如日志、事务管理、性能监控等。AOP的核心思想是将横切关注点从核心业务...

    Java核心知识体系4:AOP原理和切面应用.pdf

    【Java核心知识体系4:AOP原理和切面应用】 面向切面编程(Aspect-Oriented Programming,简称AOP)是Java开发中的一个重要概念,它旨在解决程序中的横切关注点,如日志记录、事务管理等。AOP将这些关注点从核心...

    Spring 框架之 AOP 原理剖析 - GitChat

    Spring 框架之 AOP 原理剖析.html 抓下来打包成了HTML文件, 方便离线观看

    浅尝Spring注解开发_AOP原理及完整过程分析(源码).doc

    《浅尝Spring注解开发_AOP原理及完整过程分析(源码)》 Spring框架的注解开发在现代Java应用中扮演着至关重要的角色,尤其是其面向切面编程(AOP)特性,使得代码更加模块化,提高了可维护性和可重用性。本文将...

    Java动态代理(Spring Aop原理)

    2. Spring AOP原理: - Spring AOP是基于动态代理实现的,它可以在不修改原有代码的情况下,为方法添加日志、事务管理等横切关注点。Spring支持两种类型的代理:JDK动态代理和CGLIB代理。 - JDK动态代理适用于目标...

    spring aop实现原理

    NULL 博文链接:https://zhang-yingjie-qq-com.iteye.com/blog/319927

    Spring注解驱动开发第33讲——AOP原理总结

    Spring注解驱动开发第33讲——AOP原理总结

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

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

    AOP原理1

    AOP原理详解 AOP(Aspect-Oriented Programming),即面向方面编程,是一种编程技术,能够将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,以提高代码的可维护性和灵活性。AOP 的主要思想是将程序中...

    SpringAOP原理及拦截器.doc

    Spring AOP,全称为Spring的面向切面编程,是一种编程范式,旨在将核心业务逻辑与横切关注点(如事务管理、日志记录、安全控制...通过熟练掌握AOP的原理和实践,开发者能够更高效地构建模块化的、松散耦合的软件系统。

    SpringAOP原理及拦截器.docx

    Spring AOP,全称为面向方面的编程,是一种编程范式,旨在解决传统面向对象编程中横切关注点(如事务管理、日志记录等)分散在各个类中的问题,从而提高代码的可读性和可维护性。Spring框架是AOP技术的一个重要实现...

    SpringAOP原理及拦截器.pdf

    面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在将关注点分离,使得核心业务逻辑与横切关注点(如事务管理、安全控制、日志记录等)解耦。Spring AOP是Spring框架的重要组成部分,它允许...

Global site tag (gtag.js) - Google Analytics