Spring 的环绕通知和前置通知,后置通知有着很大的区别,主要有两个重要的区别:1) 目标方法的调用由环绕通知决定,即你可以决定是否调用目标方法,而前置和后置通知是不能决定的,他们只是在方法的调用前后执行通知而已,即目标方法肯定是要执行的。2)环绕通知可以控制返回对象,即你可以返回一个与目标对象完全不同的返回值,虽然这很危险,但是你却可以办到。而后置方法是无法办到的,因为他是在目标方法返回值后调用。
Spring 提供了Interceptor 接口来实现环绕通知。它只有一个invoke 方法,该方法接只接受MethodInvocation 参数。MethodInvocation 可以获得目标方法的参数,并可以通过proceed 方法调用原来的方法。代码如下:
1)环绕通知
public class Around implements MethodInterceptor
{
public Object invoke( MethodInvocation invocation)throws Throwable {
System.out.println("Round.invoke()");
System.out.println("Arguments:");
Object[] args = invocation.getArguments();
for(Object arg: args) {
System.out.println(arg.getClass().getName() + ": " + arg);
}
System.out.println("Method name:" + invocation.getMethod().getName());
//修改了目标方法返回值
return invocation.proceed() + " in Round.invoke()";
}
}
2)目标对象
public class Target implements Advice
{
public String test(int i, String s, float f) {
System.out.println("Target.test()");
System.out.println("target: " + this);
StringBuffer buf = new StringBuffer();
buf.append( "i = " + i);
buf.append( ", s = \"" + s + "\"");
buf.append( ", f = " + f);
return buf.toString();
}
}
3)接口定义
public interface Advice
{
String test(int i, String s, float f);
}
4)配置文件
<beans>
<bean id="around" class="spring.Around"/>
<bean id="aop" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces" value="spring.Advice" />
<property name="interceptorNames">
<list>
<value>around</value>
</list>
</property>
<property name="target">
<bean class="spring.Target" />
</property>
</bean>
</beans>
分享到:
相关推荐
Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是...Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
springMybatis,springmvc,环绕通知,时间转换,des,md5加密账户密码.拦截器
spring的Aop中的前置通知,后置通知以及环绕通知简单代码
1、编写切面类,包含权限审核方法和日志记录方法,这两个方法将来会织入到...5、编写案例,运用Spring AOP技术,要求包含前置通知、后置通知、环绕通知、返回通知、异常返回通知。请掌握这五种通知的特点,及应用场景
NULL 博文链接:https://free9277.iteye.com/blog/1935492
NULL 博文链接:https://z18022893621.iteye.com/blog/1956146
本人笔记中的源代码,Spring中的5种通知和3种加载通知的方式,五个通知包括:前置通知、后置通知、环绕通知、异常通知、引用通知。三种加载方式:默认加载、按名字加载、代理类加载
NULL 博文链接:https://baobeituping.iteye.com/blog/1208293
spring前置后置环绕通知,以及所需要jar
spring框架的aop前置、后置、环绕、异常通知以及自定义切入点实例
Spring spectJ AOP 前置通知 后置通知 返回通知 异常通知 环绕通知
尚硅谷Spring4视频教程,尚硅谷_佟刚_Spring_AOP 基础,尚硅谷_佟刚_Spring_返回通知&异常通知&环绕通知
Bean、通过 FactoryBean 配置 Bean、通过注解配置 Bean、泛型依赖注入、AOP 基础、前置通知、后置通知、返回通知、异常通知、环绕通知、切面的优先级、切点表达式、使用 XML 文件的方式配置 AOP、使用 JdbcTemplate ...
springboot配置AOP切面:前置通知、后置通知、环绕通知、返回通知、异常通知
Spring,mybatis,SpringMvc,环绕通知,时间转换,静态页面变动态页面
拦截环绕通知 12.3.2.2.前置通知 12.3.2.3.异常通知 12.3.2.4.后置通知 12.3.2.5.引入通知 12.4.Spring.NET中的Advisor 12.5.使用ProxyFactoryObject创建AOP代理 12.5.1.基本原理 12.5.2.ProxyFactoryObject的属性 ...
环绕通知(Around Advice) 6.2.4.6. 通知参数(Advice parameters) 6.2.4.7. 通知(Advice)顺序 6.2.5. 引入(Introductions) 6.2.6. 切面实例化模型 6.2.7. 例子 6.3. Schema-based AOP support 6.3.1. 声明一...
aop|[aop,正则,前置通知,后置通知,环绕通知](https://github.com/smltq/spring-boot-demo/blob/master/aop/HELP.md) data-redis|[lettuce,redis,session redis,YAML配置,连接池,对象存储]...
AOP程序 Spring框架 前置通知 后置通知 异常通知 环绕通知