假设我们有一个Person接口和它的实现类PersonImpl,我们希望每次调用Person方法的时候,都能够额外做其他一些操作。这时我们配置如下:
<beanid="personTarget"class="com.mycompany.PersonImpl"> <propertyname="name"value="Tony"/> <propertyname="age"value="51"/> </bean> <beanid="myAdvisor"class="com.mycompany.MyAdvisor"> <propertyname="someProperty"value="Custom string property value"/> </bean> <beanid="debugInterceptor"class="org.springframework.aop.interceptor.DebugInterceptor"> </bean> <bean id="person" class="org.springframework.aop.framework.ProxyFactoryBean"> <propertyname="proxyInterfaces"value="com.mycompany.Person"/> <propertyname="target"ref="personTarget"/> <propertyname="interceptorNames"> <list> <value>myAdvisor</value> <value>debugInterceptor</value> </list> </property> </bean>
以上配置的含义是:定义一个AOP,用myAdvisor和debugInterceptor去拦截personTarget的操作。对使用者而言,他们都只是拿到一个person(接口)类型的对象,并不知道它真正的实现类。它的真正使用类是经2个advisor代理过的PersonImpl。
在实际应用中,这种一个对象需要被多个advisor拦截的情况不多,倒是一个advisor拦截多个接口居多,比如数据库的事务。示例配置如下:
<beanclass="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <propertyname="interceptorNames"> <list> <value>transactionInterceptor</value> </list> </property> <propertyname="beanNames"> <list> <value>productOverService</value> <value>ticketOverService</value> </list> </property> <propertyname="proxyTargetClass" value="true"/> </bean>
本配置的意思是用transactionInterceptor去拦截productOverService和ticketOverService。
因为aop的原理一样,所以aop各元素之间的装配过程也类似。无论是哪种spring的配置,所不同的只是方便性而已。凡是spring的AOP,它的底层都是JDK动态代理(代理接口)或CGLIB(代理类)。以上配置中,ProxyFactoryBean实现FactoryBean接口,这是spring预定义的一个接口,所有实现该接口的bean。它在spring容器中存储的真正对象,并不是定义时候的那个类,比如这里的ProxyFactoryBean。而是它的getObject所返回的对象,也就是说初始化person这个bean的时候,它会调用它的getObject方法,spring在这个方法里创建AOP代理。对于第二种配置,BeanNameAutoProxyCreator实现了BeanPostProcessor接口,spring在这个接口里创建AOP代理
相关推荐
**Spring AOP 配置实现详解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它允许我们通过分离关注点来简化应用程序的开发。在传统的面向对象编程中,业务逻辑与日志记录...
这篇教程将详细讲解如何通过Spring的配置文件来实现AOP。 一、理解AOP概念 AOP的核心思想是将分散在各个模块中的交叉性代码(如日志、事务处理)抽取出来,形成独立的切面,以便于复用和维护。它提供了一种模块化的...
在使用Spring AOP时,我们可以通过XML配置或注解的方式来定义切面。例如,可以使用`@Aspect`注解定义一个切面类,`@Before`、`@After`等注解来声明通知,`@Pointcut`定义切点表达式。 在实际开发中,Spring AOP广泛...
**Spring AOP XML方式配置通知** 在Java世界中,Spring框架是广泛应用的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。AOP允许开发者定义“方面”,这些方面可以封装关注点,如日志、事务...
在Spring AOP中,我们可以通过注解配置来实现切面编程,从而简化代码并提高可维护性。 首先,我们需要了解Spring AOP中的核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,它包含了横切关注点(如日志)和...
以上就是Spring AOP的基本用法。在实际项目中,你可以根据需求定义不同的通知类型,如`@After`、`@Around`、`@AfterReturning`和`@AfterThrowing`,以及复杂的切入点表达式。通过这些,你可以实现更精细的控制,如只...
Spring支持两种AOP的实现方式:Spring AspectJ注解风格和Spring XML配置风格。使用AspectJ注解风格是最常见的,它允许开发者直接在方法上使用注解来定义切面。 Spring AOP中有五种不同类型的的通知(Advice): 1....
1. **XML配置**:在Spring的配置文件中,可以通过<aop:config>标签来定义切面,<aop:pointcut>定义切点,<aop:advisor>或<aop:aspect>定义通知。例如: ```xml <aop:config> <aop:pointcut id="myPointcut" ...
Spring AOP 配置事务方法 Spring AOP(Aspect-Oriented Programming,面向方面编程)是一种编程范式,它允许开发者在不修改源代码的情况下,增强和修改应用程序的行为。 Spring AOP 提供了一种灵活的方式来实现事务...
在Spring XML配置中,我们可以使用`<aop:config>`元素来定义切点表达式,然后使用`<aop:aspect>`元素来声明切面,并将通知方法与切点关联起来。此外,还可以使用注解驱动的配置,通过`@EnableAspectJAutoProxy`注解...
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-...
- `spring-beans.jar`:Spring Bean容器的实现,提供了Bean的定义、实例化、配置和管理等功能,AOP需要它来处理对象的生命周期。 - `spring-core.jar`:Spring的核心库,提供了基本的IoC(Inversion of Control,...
### Spring之AOP配置文件详解 #### 一、前言 在Java开发中,Spring框架因其强大的功能和灵活的配置而被广泛应用于企业级应用的开发。其中,面向切面编程(Aspect Oriented Programming,简称AOP)是Spring框架的...
**配置Spring AOP的基本步骤** 1. **引入依赖** 首先,你需要在项目中引入Spring AOP的依赖。如果你使用的是Maven,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org.springframework <artifactId>...
本文将详细讲解Spring AOP的XML配置和注解方式配置。 ### XML配置方式 #### 1. 配置AOP支持 首先,在Spring的配置文件中启用AOP支持,需要添加`<aop:config>`标签: ```xml <aop:config> <!-- 这里可以配置切点...
Spring AOP的配置可以通过XML或注解方式进行: - **XML配置**: - 在`<aop:config>`标签内定义切面,`<aop:pointcut>`定义切入点,`<aop:advisor>`定义通知。 - `<aop:aspect>`标签用于定义完整的切面,包括切入...
3. **灵活的通知模型**:Spring AOP提供了多种类型的通知,包括around、before、after returning、after throwing等,使得开发者可以根据实际需求选择最适合的通知类型。 4. **丰富的切入点表达式语言**:Spring ...
在实际使用中,我们需要在项目的类路径下包含这些Jar包,并在Spring配置文件中启用AOP支持。例如,可以通过以下XML配置启用Spring AOP: ```xml <aop:aspectj-autoproxy /> ``` 然后,我们可以定义切面、切点和...
总的来说,这个Spring AOP的Demo旨在帮助我们理解如何在实际项目中利用Spring AOP进行功能增强,它展示了切面的定义、通知的使用,以及如何在Spring环境中配置和启用AOP。通过学习和实践这个Demo,我们可以更好地...
使用Spring AOP,开发者可以定义切面,声明切入点(即关注点的定位),编写通知(即实际的增强代码),并通过配置将它们应用到目标对象上。这样,我们可以保持业务逻辑的清晰,同时实现系统级的服务,如事务管理、...