applicationContext.xml:
<?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.sinosoft.module.springaop.ProxySubjectBeforeAdvice">
</bean>
<bean id="afterAdvice"
class="com.sinosoft.module.springaop.ProxySubjectAfterAdvice">
</bean>
<bean id="subject" class="com.sinosoft.module.springaop.RealSubject"></bean>
<bean id="proxy"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.sinosoft.module.springaop.Subject</value>
</property>
<property name="target">
<ref bean="subject" />
</property>
<property name="interceptorNames">
<list>
<value>beforeAdvice</value>
<value>afterAdvice</value>
</list>
</property>
</bean>
</beans>
ProxySubjectBeforeAdvice.java:
package com.sinosoft.module.springaop;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class ProxySubjectBeforeAdvice implements MethodBeforeAdvice {
public void before(Method arg0, Object[] arg1, Object arg2)
throws Throwable {
System.out.println("主体程序执行前 ***** 洗苹果 ") ;
}
}
Subject.java:
package com.sonosoft.module.springaop;
public interface Subject {
public void request() ;
}
RealSubject.java:
package com.sinosoft.module.springaop;
public class RealSubject implements Subject {
public void request() {
System.out.println("主体程序执行 ***** 吃苹果 ") ;
}
}
ProxySubjectAfterAdvice.java:
package com.sinosoft.module.springaop;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
public class ProxySubjectAfterAdvice implements AfterReturningAdvice {
public void afterReturning(Object arg0, Method arg1, Object[] arg2,
Object arg3) throws Throwable {
System.out.println("主体程序执行后 ***** 扔苹果胡 ") ;
}
}
分享到:
相关推荐
5. **理解代理行为**:理解Spring AOP代理的工作方式很重要,因为这可能影响到何时以及如何调用通知。例如,直接通过`@Autowired`注入的bean之间的相互调用不会触发AOP通知,除非显式地通过代理引用进行调用。 6. *...
- 代理(Proxy):Spring AOP通过代理来实现切面的织入。代理对象负责拦截方法调用并执行相关的通知。 在实际应用中,Spring AOP常用于以下场景: 1. 日志记录:在方法调用前后记录日志信息。 2. 事务管理:确保一...
Spring Context 是 Spring 框架的扩展,它提供了更丰富的上下文环境,包括国际化、事件广播、AOP 代理等功能。`spring-context-3.0.xsd` 文件包含了在上下文环境中配置的各种元素,如消息源、事件监听器、AOP 配置...
代理模式与动态代理--Spring AOP原理.doc
Spring AOP可以在运行时动态织入,也可以在编译时静态织入。 **2. 嵌套事务处理** - **事务传播行为(Transaction Propagation)**: 在Spring中,当一个事务方法调用另一个事务方法时,需要明确指定事务如何传播。...
本篇将详细讲解Spring中的AOP实现,特别是JDK动态代理的应用。 首先,我们要了解什么是AOP(Aspect Oriented Programming,面向切面编程)。AOP是一种编程范式,旨在解决应用程序中分散的、横切关注点的问题,如...
6. 目标对象(Target Object):被AOP代理的对象。 7. 代理(Proxy):AOP框架创建的对象,它实现了目标对象的所有接口并拦截方法调用以执行通知。 在Spring配置文件中,我们可以通过以下方式引用`spring-aop.xsd`...
"spring-objenesis-repack-2.6.jar"和"spring-objenesis-repack-2.5.1.jar"是Spring对Objenesis的不同版本,它们用于支持Spring框架中的某些特定功能,如Spring的测试框架或者AOP代理的创建。 在阅读Spring源码时,...
当Spring框架在进行AOP代理时,如果目标类没有实现接口,它会选择使用CGLIB来创建一个子类并动态地插入拦截器方法。CGLIB通过字节码操作技术生成代理类,这样就可以在运行时扩展或修改已有类的功能,而无需修改原始...
1. **AOP代理**:Spring AOP支持两种代理方式,即JDK动态代理和CGLIB代理。JDK代理用于实现接口的类,而CGLIB代理则用于未实现接口的类。spring-aop.jar包含了这些代理机制的相关类,如`org.springframework.aop....
Spring使用CGILib作为其代理实现的一部分,特别是在进行代理代理时,如事务管理、AOP切面等。 其次,`spring-objenesis-repack-2.1.jar`则是关于Objenesis库。Objenesis是一个轻量级库,用于在Java中快速实例化无参...
- 基于代理(Proxy-based):Spring默认使用JDK动态代理或CGLIB动态代理来创建目标对象的代理,实现在调用目标方法前后插入通知。 - 基于ASM字节码操作(Bytecode-level):在类加载到内存时,通过ASM库修改字节码...
在Spring中,AOP主要通过两种动态代理技术实现:JDK动态代理和CGLIB动态代理。 首先,让我们详细了解一下JDK动态代理。JDK动态代理基于Java的接口实现,它适用于目标对象实现了至少一个接口的情况。在运行时,JDK...
- **代理模式**:Spring AOP主要通过代理实现,有JDK动态代理和CGLIB代理两种。JDK代理用于接口实现类,CGLIB代理则用于没有接口的类。 - **注解驱动**:使用`@Aspect`、`@Before`、`@After`等注解声明切面和通知...
3. **智能代理增强**:Spring AOP可以自动创建JDK动态代理或CGLIB代理,根据目标对象是否实现了接口来决定,这使得AOP能在各种情况下无缝工作。 4. **事务管理**:Spring AOP在事务管理方面有着出色的表现,可以...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它提供了一种在不修改原有代码的情况下,对程序进行功能增强的技术。在本压缩包"my-spring.rar"中,包含的是一个Spring...
这两个库在Spring框架中的协同工作,使得Spring能够灵活地处理各种类型的类,并实现高效的AOP代理。它们对于提高代码的可维护性、可测试性和整体性能都有着重要作用。在实际开发中,理解这些底层机制可以帮助开发者...
- **代理模式**:Spring AOP通过两种代理方式实现,即JDK动态代理和CGLIB代理。前者适用于接口实现类,后者适用于无接口的类。 - **注解驱动**:从4.0.0.RELEASE开始,Spring AOP支持完全基于注解的配置,大大...
4. **自动代理(Proxy)**:Spring使用两种代理模式,JDK动态代理和CGLIB代理。如果目标类实现了接口,Spring将使用JDK动态代理;否则,它会使用CGLIB来创建代理类。 5. **注解驱动的AOP**:在Spring Boot中,我们...
在Java开发领域,Spring...这两个jar文件是Spring框架的重要组成部分,它们为Spring的动态代理、AOP功能以及测试支持提供了底层支持。在实际开发中,确保这些库的正确配置和版本匹配对于Spring应用的正常运行至关重要。