`

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源码:从原理到实现,全方位掌握Java AOP编程精髓

    Spring AOP主要基于动态代理模式,它允许开发者在不改变原有代码结构的情况下,增加额外的行为。这主要通过定义“切面(Aspects)”和“通知(Advices)”来实现,其中切面定义了何时以及如何插入额外的行为,而通知...

    Spring AOP运用Spring AOP技术,要求包含前置通知、后置通知、环绕通知、返回通知、异常返回通知。

    1、编写切面类,包含权限审核方法和日志记录方法,这两个方法将来会织入到...5、编写案例,运用Spring AOP技术,要求包含前置通知、后置通知、环绕通知、返回通知、异常返回通知。请掌握这五种通知的特点,及应用场景

    spring AOP代理机制.docx

    sping AOP面向切面的编程,程序运行过程中动态加入所需代码等,对公共的问题进行集中处理,具体的实现有动态代理与静态代理,本文通过对AOP的代理机制,前置、后置、环绕、异常的通知进行了综合总结和运用!

    spring代码课堂笔记

    Spring AOP:简化代理模式实现步骤 1.声明接口:注册需要被监听行为名称 2.接口实现类: 扮演被监控的类,负责被监听方法实现细节 3.次要业务/增强业务 Spring AOP 通知种类:设置次要业务与(被监听方法)绑定...

    spring aop的注解配置中,前置,后置,环绕通知,以及异常通知怎么获得被代理方法的参数

    NULL 博文链接:https://baobeituping.iteye.com/blog/1208293

    Spring.html

    修改默认代理方法:&lt;aop:aspectj-autoproxy proxy-target-class="true"/&gt; 增强种类 前置通知 后置通知 异常通知 最终通知 环绕通知 注意:使用注解的方式,最终通知和后置通知顺序换了,建议使用环绕通知...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.1.3. Spring的AOP代理 6.2. @AspectJ支持 6.2.1. 启用@AspectJ支持 6.2.2. 声明一个切面 6.2.3. 声明一个切入点(pointcut) 6.2.3.1. 切入点指定者的支持 6.2.3.2. 合并切入点表达式 6.2.3.3. 共享常见的切入点...

    spring.net中文手册在线版

    12.1.3.Spring.NET的AOP代理 12.2.Spring.NET中的切入点 12.2.1.概念 12.2.2.切入点的操作 12.2.3.Spring.NET提供的切入点实现类 12.2.3.1.静态切入点 12.2.3.2.动态切入点 12.2.4.自定义切入点 12.3.Spring.NET的...

    spring in action英文版

    第三部分 Spring在Web层的应用  第8章 建立Web层  8.1 开始Spring MVC之旅  8.1.1 请求生命中的一天  8.1.2 配置DispatcherServlet  8.1.3 Spring MVC概述  8.2 将请求映射到控制器  8.2.1 将...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    JavaScript中AOP的实现与应用

    使用过java spring的同学一定知道,其内分为三种通知,before(前置通知)、after(后置通知)、around(环绕通知)。 下面我们分别在js调用方法时实现这三种通知: before(前置通知) 顾名思义,就是在函数调

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    MyEclipse 6 Java 开发中文教程第十章

    208 &lt;br&gt;10.4.3 开发环绕通知(Around Advice)AOP 应用... 210 &lt;br&gt;10.5 Spring数据库开发... 214 &lt;br&gt;10.5.1 DataSource 和 JDBCTemplate开发... 214 &lt;br&gt;10.5.2 Hibernate 整合 Spring开发... 223...

    first Spring test

    1.实现特定功能的方面代码在aop中又称为“通知(Advice)”包含 前置通知 后置通知 环绕...2.spring 采用代理的方式将通知织入到原bean中,将原bean和通知都封装到--org.springframework.aop.framework.ProxyFactory.

    《MyEclipse 6 Java 开发中文教程》前10章

    10.5.2.3 用Spring 1.2 的事务代理类解决事务提交问题 245 10.5.2.4 用Spring 2.0 的aop和tx声明式配置解决事务提交问题 247 10.5.2.5 用Spring 2.0 的@Transactional标注解决事务提交问题(最佳方案) 251 10.5.2.6...

Global site tag (gtag.js) - Google Analytics