标签:springaop 前置增强 后置增强 methodbeforeadvice
package com.paic.zhangqi.spring.aop;
public interface Waiter {
void greetTo(String name);
void serveTo(String name);
}
package com.paic.zhangqi.spring.aop;
public class NaiveWaiter implements Waiter {
@Override
public void greetTo(String name) {
System.out.println("greet to "+name+"...");
}
@Override
public void serveTo(String name) {
System.out.println("serving "+name+"...");
}
}
package com.paic.zhangqi.spring.aop;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class GreetingBeforeAdvice implements MethodBeforeAdvice {
@Override
public void before(Method method, Object[] args, Object obj) throws Throwable {
String clientName = (String)args[0];
System.out.println("How are you!Mr."+clientName+".");
}
}
package com.paic.zhangqi.spring.aop;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
public class GreetingAfterAdvice implements AfterReturningAdvice {
@Override
public void afterReturning(Object arg0, Method arg1, Object[] arg2,
Object arg3) throws Throwable {
System.out.println("Please enjoy yourself!");
}
}
package com.paic.zhangqi.spring.aop;
import org.springframework.aop.AfterAdvice;
import org.springframework.aop.BeforeAdvice;
import org.springframework.aop.framework.ProxyFactory;
public class TestAdvice {
public static void main(String[] args) {
Waiter target = new NaiveWaiter();
BeforeAdvice beforeAdvice = new GreetingBeforeAdvice();
AfterAdvice afterAdvice = new GreetingAfterAdvice();
// spring 提供的代理工厂
ProxyFactory pf = new ProxyFactory();
// 设置代理目标
pf.setTarget(target);
// 为代理目标添加增强
pf.addAdvice(beforeAdvice);
pf.addAdvice(afterAdvice);
// 生成代理实例
Waiter proxy = (Waiter)pf.getProxy();
proxy.greetTo("John");
proxy.serveTo("Tomcat");
}
}
How are you!Mr.John. greet to John... Please enjoy yourself! How are you!Mr.Tomcat. serving Tomcat... Please enjoy yourself!
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="greetingBefore" class="com.paic.zhangqi.spring.aop.GreetingBeforeAdvice" />
<bean id="greetingAfter" class="com.paic.zhangqi.spring.aop.GreetingAfterAdvice" />
<bean id="target" class="com.paic.zhangqi.spring.aop.NaiveWaiter" />
<bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces" value="com.paic.zhangqi.spring.aop.Waiter" />
<property name="interceptorNames" value="greetingBefore,greetingAfter" />
<property name="target" ref="target" />
</bean>
</beans>package com.paic.zhangqi.spring.aop;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringConfigTest {
public static void main(String[] args) {
String configPath = "com/paic/zhangqi/spring/aop/beans.xml";
ApplicationContext ctx = new ClassPathXmlApplicationContext(configPath);
Waiter waiter = (Waiter) ctx.getBean("waiter");
waiter.greetTo("John");
waiter.serveTo("Tomcat");
}
}
How are you!Mr.John. greet to John... Please enjoy yourself! How are you!Mr.Tomcat. serving Tomcat... Please enjoy yourself!
标签:springaop 前置增强 后置增强 methodbeforeadvice
原文地址:http://blog.csdn.net/magi1201/article/details/45897915