`
eils2000
  • 浏览: 50383 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

创建Spring切面的过程

阅读更多

第一步,创建通知。Spring中定义的五种形式的通知,分别是before、after-returning、after-throwing、around和introduction。我们可以定义一个通知类实现上述五种形式中的一种或几种。

第二步,定义切点和通知者。切点是一个或多个应该被切面使用的连接点。意在告诉程序在哪里使用第一步中创建的通知。Spring提供了正则表达式切点和AspectJ表达式切点:(org.springframework.aop.support.JdkRegexpMethodPointcut,org.springframework.aop.aspectj.AspectJExpressionPointcut)。然后将切点和通知关联到通知者。

<bean id="audienceAdvice" class="org.springsource.springidol.AudienceAdvice">
//AudienceAdvice为实现了五种通知接口中的某些接口的类
<property name="audience" ref="audience" />
</bean>
<bean id="pointcut" class="*.JdkRegexpMethodPointcut">
<property name="pattern" value=".*perform"/>
</bean>
<bean id="advisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice" ref="audienceAdvice"/>
<property name="pointcut" ref="performancePointCut"/>
</bean>

 

当然也有一些更为简洁的方法,不在本文的论述范围,本文是为了说明创建切面的过程。

第三步,最后定义代理类来代理目标bean的功能。

<bean id="jugglerProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="juggler"/>
<property name="interceptorNames" value="audiencePointcutAdvisor"/>
<property name="proxyInterfaces" value="org.springsource.springidol.Performer"/>
</bean>

 

当我们调用一个被通知的Bean上的方法是,首先调用的是代理上的方法,然后代理会使用切点来决定通知是否应该被应用,最后调用被通知的bean本省。

其中PoxyFactoryBean代理了juggler Bean的一些操作,interceptorNames则是说audiencePointcutAdvisor这个通知被用于bean juggler,而proxyInterfaces则告诉ProxyFactoryBean动态代理需要实现Performer接口(因为bean juggler实现了Performer接口,而通知是在切点perform()方法前后执行)。

 

 

ps:利用aop元素进行配置可以对配置文件进行精简,<aop:config>可以申明对什么样的bean的什么方法启用通知者,

<aop:config>
    <aop:aspect ref="paula">
      <aop:before 
          pointcut="execution(* *.perform(..))"
          method="greetPerformer"/>
      <aop:after-returning
          pointcut="execution(* *.perform(..))"
          method="saySomethingNice"/>
      <aop:after-throwing
          pointcut="execution(* *.perform(..))"
          method="saySomethingNiceAnyway"/>
    </aop:aspect>
</aop:config>

(不需要在代码中增加标注) 

还有一种方式是使用@Aspect标注,只需在配置文件中添加:

<aop:aspectj-autoproxy />,然后再代码中编写标注。

分享到:
评论

相关推荐

    spring切面小例子

    总结一下,这个"spring切面小例子"展示了如何在Spring中使用注解实现AOP。通过定义切面、切点和通知,我们可以将非业务逻辑的关注点如日志记录与核心业务代码解耦,使得代码更清晰,维护性更强。这个例子对于理解和...

    Spring自定义切面事务问题

    - 当我们创建自定义切面并通过`@Aspect`注解将其标记为切面时,如果没有正确地处理事务管理器和切面之间的关系,可能会导致事务失效。 - 默认情况下,Spring 的AOP代理模型在处理事务时,如果目标对象实现了接口...

    spring切面AOP所使用的jar包

    Spring框架的AOP(面向切面编程)是其核心特性之一,它允许开发者在不修改原有代码的情况下,通过切面来插入额外的功能,比如日志记录、事务管理、性能监控等。在Spring AOP中,主要涉及到两个重要的库:...

    spring自定义切面实例

    而@AspectJ是Spring AOP的一个强大扩展,它允许使用声明式的方式定义切面,简化了AOP的实现过程。 #### 2. **配置AspectJ自动代理** 在Spring配置文件中,可以通过`&lt;aop:aspectj-autoproxy/&gt;`标签启用AspectJ的...

    spring 切面编程实例

    6. **代理(Proxy)**:Spring AOP通过创建代理对象来实现切面功能。有JDK动态代理和CGLIB代理两种方式。如果目标类实现了接口,Spring会使用JDK动态代理;如果没有,Spring会使用CGLIB生成一个子类来作为代理。 在...

    spring AOP切面编程

    5. 织入(Weaving):将切面应用到目标对象来创建新的代理对象的过程。 二、Spring AOP实现方式 1. 动态代理:当目标对象实现了接口时,Spring使用JDK动态代理生成一个代理对象,实现在方法调用前后添加通知功能。 ...

    Spring AOP 建立一个简单的切面及测试

    ### Spring AOP 实现简单切面及测试 #### 一、引言 在软件开发过程中,经常遇到一些横切关注点的问题,例如日志记录、性能监控等,这些功能往往贯穿于应用程序的多个模块中。面向切面编程(Aspect Oriented ...

    Spring切面简介示例代码

    Spring切面编程是Spring框架中的一个重要特性,它实现了面向切面的编程(AOP),这是一种设计模式,旨在提高代码的可重用性、模块化和可维护性。在AOP中,切面是关注点的一个模块化,这些关注点通常包括日志、事务...

    Spring面向切面编程AOP

    5. **织入(Weaving)**:织入是将切面应用到目标对象并创建一个代理对象的过程。这个过程可以在编译时、类加载时或运行时完成。Spring支持在运行时动态地将切面织入到Java代理对象中。 在Spring框架中,AOP主要...

    Spring切面AOP编程的简单模拟实现

    在Spring中,我们可以通过定义一个带有注解的类来创建切面,这个类通常包含多个通知方法。 通知(Advice)是切面在特定连接点上执行的代码。在我们的模拟实现中,我们将创建四个不同类型的Advice: 1. **前置通知*...

    第十四章 Spring4 切面事物与事物通知与传播行为

    在IT领域,Spring框架是Java开发中的核心组件之一,它为开发者提供了许多强大的功能,包括依赖注入、面向切面编程(AOP)以及事务管理。本章将详细探讨Spring4中的切面事务处理、事物通知以及传播行为。 一、切面...

    spring aop切面拦截指定类和方法实现流程日志跟踪

    为了解决这一问题,可以利用Spring框架中的AOP(Aspect Oriented Programming,面向切面编程)技术来实现。 #### 二、Spring AOP 概述 Spring AOP 是Spring框架提供的一种实现AOP的方法。通过AOP,开发者可以在不...

    AOP_使用spring框架进行面向切面编程

    5. **织入(Weaving)**:织入是将切面应用到目标对象,创建代理对象的过程。Spring支持三种织入方式:编译时织入、类加载时织入和运行时织入。其中,最常见的是运行时织入,它在Spring容器初始化bean时动态创建代理...

    Spring mvc mybatis plus 实现AOP 切面日志系统

    在IT行业中,Spring MVC、MyBatis Plus以及AOP(面向切面编程)是Java Web开发中的重要组件,常用于构建高效、灵活的企业级应用。本项目“Spring MVC Mybatis Plus 实现AOP 切面日志系统”旨在提供一个基础的日志...

    struts2+spring+hibernate分页,事务,自定义切面

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2主要用于MVC(模型-视图-控制器)架构的实现,Spring提供了强大的依赖注入和面向切面编程功能,而Hibernate则是一个优秀的...

    spring使用动态代理面向切面编程(AOP) xml

    织入是把切面应用到目标对象上,创建代理对象的过程。 二、Spring中的动态代理 Spring支持两种类型的动态代理:JDK动态代理和CGLIB代理。JDK动态代理基于接口,适用于目标对象实现了至少一个接口的情况。CGLIB代理...

    spring使用动态代理面向切面编程(AOP) annotation

    织入(Weaving)是将切面应用到目标对象以创建新的代理对象的过程。 在Spring中,AOP主要通过两种方式实现:基于接口的JDK动态代理和基于类的CGLIB代理。当目标对象实现了接口时,Spring会选择使用JDK动态代理;...

    Spring面向切面编程示例代码

    5. **织入(Weaving)**:将切面与目标对象连接的过程,可以在编译时、加载时或运行时完成。 在Spring中实现AOP,通常有两种方式: 1. **基于注解的AOP**:通过在方法上添加注解(如`@Before`、`@After`、`@Around`...

    Spring-aop面向切面编程实例

    3. **织入(Weaving)**:实际将切面应用到目标对象的过程。Spring支持三种织入方式:编译时织入、加载时织入和运行时织入。Spring默认采用的是动态代理,即运行时织入,它通过创建代理对象来实现AOP的功能。 在...

    Spring AOP切面编程简介

    Spring框架中的AOP模块提供了实现这一目标的工具,使得开发者可以轻松地创建和使用切面。 AOP的核心概念包括以下几个部分: 1. **切面(Aspect)**:切面是AOP的核心,它包含了业务逻辑和横切关注点。在Spring AOP...

Global site tag (gtag.js) - Google Analytics