`

Spring AOP系列之三:环绕代理

阅读更多
通过实现org.aopalliance.intercept.MethodInterceptor接口来实现环绕通知:

public class CarAroundProxy implements MethodInterceptor {

	@Override
	public Object invoke(MethodInvocation invocation) throws Throwable {
		System.out.println("Skoda 4S shop");
		Object result = invocation.proceed();
		System.out.println("Give 200 maintenance coupon via around proxy");
		return result;
	}
}


Spring配置文件beans-around-proxy.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
  default-autowire="byName">

  <bean id="car" class="com.john.spring.aop.Car">
  	<property name="name" value="Superb" />
	<property name="price" value="220000" />
  </bean>
  
  <bean id="carAroundProxy" class="com.john.spring.aop.CarAroundProxy" />
  
  <!-- 通过ProxyFactoryBean来生成实现指定接口,拦截指定对象方法的代理类 -->
  <bean id="proxyBean" class="org.springframework.aop.framework.ProxyFactoryBean">
  	<property name="proxyInterfaces"><!-- 代理需实现的接口 -->
  		<value>com.john.spring.aop.Vehicle</value>
	</property>
	<property name="interceptorNames"><!-- 拦截器名称列表 -->
		<list>
			<value>carAroundProxy</value>
		</list>
	</property>
	<property name="target"><!-- 目标对象 -->
		<ref bean="car" />
	</property>
  </bean>
</beans>


测试:
public static void main(String[] args) {
	ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "beans-around-proxy.xml" });
	Vehicle vehicle = (Vehicle) ctx.getBean("proxyBean");
	vehicle.info();
}


输出:
Skoda 4S shop
Car name: Superb, price: 220000
Give 200 maintenance coupon via around proxy

调试程序,vehicle使用JDK的代理生成:
  • 大小: 6.5 KB
分享到:
评论

相关推荐

    spring之AOP(动态代理)

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

    Spring AOP源码深度解析:掌握Java高级编程核心技术

    Spring AOP(面向切面编程)是Spring框架中的核心组件,它通过代理模式实现了对程序逻辑的非侵入式增强,使得开发者可以集中精力于业务逻辑,而将横切关注点(如日志、事务管理)剥离出来。本文将深入探讨Spring AOP...

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    在 Spring AOP 中,`ObjenesisCglibAopProxy` 类负责使用 CGLIB 创建代理对象,它会将一系列的 `MethodInterceptor` 注册为 `Callback`,这些 `MethodInterceptor` 执行了 AOP 的逻辑。 在 Spring AOP 的自动代理...

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

    Spring提供了两种类型的代理:JDK动态代理和CGLIB代理。 8. **编织(Weaving)**:是指将通知插入到目标对象的过程。Spring AOP是在运行时完成的织入过程,即在程序运行时动态地添加通知。 #### 三、Spring AOP的...

    spring aop jar 包

    Spring AOP支持五种类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **切点(Pointcut)**:切点是程序执行过程中的...

    spring aop依赖jar包

    现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...

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

    Spring AOP支持不同的代理策略,包括JDK动态代理和CGLIB代理。如果被代理的类没有实现接口,Spring AOP会采用CGLIB来生成代理对象。CGLIB(Code Generation Library)是一个开源的代码生成库,它允许运行时在内存中...

    Spring AOP 16道面试题及答案.docx

    总的来说,Spring AOP通过代理和通知机制,实现了横切关注点的模块化,使得业务逻辑与系统服务(如日志、事务等)解耦,提高了代码的可读性和可维护性。同时,引介功能进一步增强了切面的功能,可以为对象动态地添加...

    springAOP配置动态代理实现

    动态代理则是Spring AOP实现的核心技术之一,它允许我们在运行时创建具有额外行为的对象。下面将详细阐述Spring AOP的配置以及动态代理的实现。 一、Spring AOP基础知识 1. **什么是AOP**:AOP是一种编程范式,...

    springAop默认代理方式.zip

    在Spring AOP中,代理是实现切面的关键机制,它在目标对象与实际调用之间起到了中介作用,让我们来详细探讨Spring AOP的默认代理方式。 1. **静态代理**:Spring AOP 提供了两种代理方式,一种是静态代理,另一种是...

    spring AOP依赖三个jar包

    - **代理模式**:Spring AOP支持JDK动态代理和CGLIB代理,根据目标对象是否实现了接口来选择合适的代理方式。 - **自动代理生成**:Spring容器可以在启动时自动识别并生成代理对象,无需手动创建。 - **事务管理**...

    spring AOP的运用

    3. Spring AOP的代理机制分为JDK动态代理和CGLIB代理。如果目标类实现了接口,Spring会选择JDK动态代理;否则,使用CGLIB生成子类进行代理。 4. 通知的执行顺序可以通过`@Order`注解或`@Priority`注解来控制。Spring...

    Spring AOP需要jar包.rar

    Spring AOP支持多种通知类型,包括前置通知、后置通知、异常通知、最终通知和环绕通知。 在实际开发中,配置Spring AOP可以通过XML或者基于注解的方式。XML配置文件中,可以定义&lt;aop:config&gt;元素来开启AOP支持,...

    Spring AOP完整例子

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过插入切面来增强或改变程序的行为。在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型...

    spring aop 学习笔记

    - `org.springframework.aop.framework.ProxyFactoryBean` 和 `org.springframework.aop.framework.JdkDynamicAopProxy` 是动态代理的关键类。 - `org.springframework.aop.aspectj.AspectJExpressionPointcut` ...

    JavaEE Spring AOP使用

    6. **代理(Proxy)**:Spring AOP通过动态创建代理对象来实现切面的功能。有JDK动态代理和CGLIB代理两种方式,JDK代理用于接口,CGLIB代理用于无接口类。 接下来,我们探讨如何在Spring中配置和使用AOP: 1. **...

    SpringAop学习笔记以及实现Demo

    1. **基于代理的AOP**:Spring提供了两种代理方式,JDK动态代理和CGLIB代理。JDK动态代理主要针对接口实现,而CGLIB代理则针对类实现。 2. **基于注解的AOP**:Spring 2.5开始支持注解驱动的AOP,通过在方法上使用`...

    spring aop spring aop

    5. **代理(Proxy)**:Spring AOP通过动态代理机制创建目标对象的代理,代理对象在调用目标方法时会自动插入切面逻辑。在Java项目中,Spring可以使用JDK动态代理或CGLIB动态代理来创建代理对象。 在实际应用中,...

    spring-aop实例

    通过以上介绍,我们可以看到Spring AOP的强大之处在于它简化了代码的组织和维护,使得横切关注点的实现更加优雅。了解并掌握这些概念,开发者可以有效地利用Spring AOP提升应用程序的可维护性和可扩展性。

    Spring AOP依赖jar包

    - **代理(Proxy)**:Spring AOP 通过代理来实现对目标对象的增强,有 JDK 动态代理和 CGLIB 代理两种方式。 2. **AspectJ 1.6.12 Jar 包** `AspectJ` 是一个独立的 AOP 框架,提供了更强大的 AOP 支持,包括...

Global site tag (gtag.js) - Google Analytics