`

Spring--AOP 动态代理

阅读更多
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("主体程序执行后 ***** 扔苹果胡 ") ;
	}

}
分享到:
评论

相关推荐

    spring-boot aop

    5. **理解代理行为**:理解Spring AOP代理的工作方式很重要,因为这可能影响到何时以及如何调用通知。例如,直接通过`@Autowired`注入的bean之间的相互调用不会触发AOP通知,除非显式地通过代理引用进行调用。 6. *...

    spring-aop-jar

    - 代理(Proxy):Spring AOP通过代理来实现切面的织入。代理对象负责拦截方法调用并执行相关的通知。 在实际应用中,Spring AOP常用于以下场景: 1. 日志记录:在方法调用前后记录日志信息。 2. 事务管理:确保一...

    spring-aop-3.0.xsd spring-beans-3.0 spring-context-3.0.xsd spring-mvc-3.1.xsd

    Spring Context 是 Spring 框架的扩展,它提供了更丰富的上下文环境,包括国际化、事件广播、AOP 代理等功能。`spring-context-3.0.xsd` 文件包含了在上下文环境中配置的各种元素,如消息源、事件监听器、AOP 配置...

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

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

    spring-nested-aop.zip_aop_spring aop

    Spring AOP可以在运行时动态织入,也可以在编译时静态织入。 **2. 嵌套事务处理** - **事务传播行为(Transaction Propagation)**: 在Spring中,当一个事务方法调用另一个事务方法时,需要明确指定事务如何传播。...

    Spring-AOP-JDK动态代理

    本篇将详细讲解Spring中的AOP实现,特别是JDK动态代理的应用。 首先,我们要了解什么是AOP(Aspect Oriented Programming,面向切面编程)。AOP是一种编程范式,旨在解决应用程序中分散的、横切关注点的问题,如...

    spring-aop.xsd

    6. 目标对象(Target Object):被AOP代理的对象。 7. 代理(Proxy):AOP框架创建的对象,它实现了目标对象的所有接口并拦截方法调用以执行通知。 在Spring配置文件中,我们可以通过以下方式引用`spring-aop.xsd`...

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.ja及ck-2.5.1.jar

    "spring-objenesis-repack-2.6.jar"和"spring-objenesis-repack-2.5.1.jar"是Spring对Objenesis的不同版本,它们用于支持Spring框架中的某些特定功能,如Spring的测试框架或者AOP代理的创建。 在阅读Spring源码时,...

    spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.5.1.jar

    当Spring框架在进行AOP代理时,如果目标类没有实现接口,它会选择使用CGLIB来创建一个子类并动态地插入拦截器方法。CGLIB通过字节码操作技术生成代理类,这样就可以在运行时扩展或修改已有类的功能,而无需修改原始...

    spring-aop.jar

    1. **AOP代理**:Spring AOP支持两种代理方式,即JDK动态代理和CGLIB代理。JDK代理用于实现接口的类,而CGLIB代理则用于未实现接口的类。spring-aop.jar包含了这些代理机制的相关类,如`org.springframework.aop....

    spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.1.jar

    Spring使用CGILib作为其代理实现的一部分,特别是在进行代理代理时,如事务管理、AOP切面等。 其次,`spring-objenesis-repack-2.1.jar`则是关于Objenesis库。Objenesis是一个轻量级库,用于在Java中快速实例化无参...

    spring----AOP实现

    - 基于代理(Proxy-based):Spring默认使用JDK动态代理或CGLIB动态代理来创建目标对象的代理,实现在调用目标方法前后插入通知。 - 基于ASM字节码操作(Bytecode-level):在类加载到内存时,通过ASM库修改字节码...

    spring之AOP(动态代理)

    在Spring中,AOP主要通过两种动态代理技术实现:JDK动态代理和CGLIB动态代理。 首先,让我们详细了解一下JDK动态代理。JDK动态代理基于Java的接口实现,它适用于目标对象实现了至少一个接口的情况。在运行时,JDK...

    AOP.rar-Spring-AOP源码Demo

    - **代理模式**:Spring AOP主要通过代理实现,有JDK动态代理和CGLIB代理两种。JDK代理用于接口实现类,CGLIB代理则用于没有接口的类。 - **注解驱动**:使用`@Aspect`、`@Before`、`@After`等注解声明切面和通知...

    spring-aop-4.2.6.RELEASE.zip

    3. **智能代理增强**:Spring AOP可以自动创建JDK动态代理或CGLIB代理,根据目标对象是否实现了接口来决定,这使得AOP能在各种情况下无缝工作。 4. **事务管理**:Spring AOP在事务管理方面有着出色的表现,可以...

    my-spring.rar-Spring-AOP源码Demo

    Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它提供了一种在不修改原有代码的情况下,对程序进行功能增强的技术。在本压缩包"my-spring.rar"中,包含的是一个Spring...

    spring-cglib-repack-3.2.6.jar和spring-objenesis-repack-2.6.jar

    这两个库在Spring框架中的协同工作,使得Spring能够灵活地处理各种类型的类,并实现高效的AOP代理。它们对于提高代码的可维护性、可测试性和整体性能都有着重要作用。在实际开发中,理解这些底层机制可以帮助开发者...

    spring-aop-4.0.0.RELEASE

    - **代理模式**:Spring AOP通过两种代理方式实现,即JDK动态代理和CGLIB代理。前者适用于接口实现类,后者适用于无接口的类。 - **注解驱动**:从4.0.0.RELEASE开始,Spring AOP支持完全基于注解的配置,大大...

    spring-boot-aop.zip

    4. **自动代理(Proxy)**:Spring使用两种代理模式,JDK动态代理和CGLIB代理。如果目标类实现了接口,Spring将使用JDK动态代理;否则,它会使用CGLIB来创建代理类。 5. **注解驱动的AOP**:在Spring Boot中,我们...

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.jar

    在Java开发领域,Spring...这两个jar文件是Spring框架的重要组成部分,它们为Spring的动态代理、AOP功能以及测试支持提供了底层支持。在实际开发中,确保这些库的正确配置和版本匹配对于Spring应用的正常运行至关重要。

Global site tag (gtag.js) - Google Analytics