Spring-AOP 通过配置文件实现 后置增强
【摘要】
概述实例
概述
后置增强在目标方法调用后执行.
实例
代码已托管到Github—> https://github.com/yangshangwei/Spring...
概述
后置增强在目标方法调用后执行.
实例
代码已托管到Github—> https://github.com/yangshangwei/SpringMaster
例如上面的例子中,在服务生每次服务后,也需要向客人问候,可以通过后置增强来实施这一要求,步骤如下:
创建业务接口类:Waiter.java
创建业务实现类:NativeWaiter.java
创建业务增强类:GreetingAfterAdvice.java
创建配置文件:conf-advice.xml
创建增强测试类:AfterReturingAdviceTest.java
业务接口类
package com.xgj.aop.spring.advice.afterRetruingAdivce;
public interface Waiter {
void greetTo(String name);
void serverTo(String name);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
业务实现类
package com.xgj.aop.spring.advice.afterRetruingAdivce;
public class NaiveWaiter implements Waiter {
@Override
public void greetTo(String name) {
System.out.println("greetTo " + name);
}
@Override
public void serverTo(String name) {
System.out.println("serverTo " + name);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
业务增强类
package com.xgj.aop.spring.advice.afterRetruingAdivce;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
public class GreetingAfterAdvice implements AfterReturningAdvice {
/**
* 后置增强代码实现,在目标方法执行后调用
*
* @param returnValue
* 代理返回对象
* @param method
* 目标对象方法
* @param args
* 目标对象方法参数
* @param target
* 目标对象
* @throws Throwable
*/
@Override
public void afterReturning(Object returnValue, Method method,
Object[] args, Object target) throws Throwable {
System.out.println("please enjoy youself,Sir!");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
在配置文件中对其进行配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
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">
<bean id="target" class="com.xgj.aop.spring.advice.afterRetruingAdivce.NaiveWaiter"/>
<bean id="greetingBeforeAdvice" class="com.xgj.aop.spring.advice.proxyFactory.GreetingBeforeAdvice"/>
<bean id="greetingAfterAdvice" class="com.xgj.aop.spring.advice.afterRetruingAdivce.GreetingAfterAdvice"/>
<bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean"
p:proxyInterfaces="com.xgj.aop.spring.advice.afterRetruingAdivce.Waiter"
p:interceptorNames="greetingBeforeAdvice,greetingAfterAdvice"
p:target-ref="target"/>
</beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
interceptorNames 是String[]类型的,它接收增强Bean的名称而非增强Bean的实例。这是因为ProxyFactory内部在省城代理类时,需要使用增强Bean得嘞,而非增强Bean的实例,以织入增强类中所写的横切代码逻辑。
测试类
package com.xgj.aop.spring.advice.afterRetruingAdivce;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AfterReturingAdviceTest {
@Test
public void test() {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"classpath:com/xgj/aop/spring/advice/afterRetruingAdivce/conf-advice.xml");
Waiter waiter = ctx.getBean("waiter", Waiter.class);
waiter.greetTo("Xiao");
waiter.serverTo("GongJiang");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
运行结果
可以看到,前置、后置增强中的逻辑都成功的织入到目标类NaiveWaiter方法所对应的连接点上。
文章来源: artisan.blog.csdn.net,作者:小小工匠,版权归原作者所有,如需转载,请联系作者。
原文链接:artisan.blog.csdn.net/article/details/77187128
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)