package net.itdos.junit;
import net.itdos.aop.JDKProxy;
import net.itdos.service.PersonService;
import net.itdos.service.impl.PersonServiceBean;
import org.junit.BeforeClass;
import org.junit.Test;
public class AOPJunit {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Test
public void AOP(){
JDKProxy factory = new JDKProxy();
PersonService personService = (PersonService)factory.CreateProxyIntance(new PersonServiceBean("fff"));
personService.save();
}
}
package net.itdos.service.impl;
import net.itdos.service.PersonService;
public class PersonServiceBean implements PersonService {
public PersonServiceBean() {
super();
}
public PersonServiceBean(String name) {
super();
this.name = name;
}
private String name;
public String getName() {
return name;
}
public void save(){
System.out.println("这是个save方法");
}
public void update(){
System.out.println("这是个update方法");
}
}
package net.itdos.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import net.itdos.service.impl.PersonServiceBean;
public class JDKProxy implements InvocationHandler {
public Object targetObject;
public Object CreateProxyIntance(Object targetObject){
this.targetObject = targetObject;
return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),
this.targetObject.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object object, Method method, Object[] args)
throws Throwable {
Object result = null;
PersonServiceBean personServiceBean = (PersonServiceBean)this.targetObject;
if(personServiceBean.getName() != null){
result = method.invoke(targetObject, args);
}
return result;
}
}
本文通过JUnit测试框架演示了面向切面编程(AOP)的应用,使用JDK动态代理实现对PersonService接口的方法拦截。测试中对PersonServiceBean进行了实例化,并调用了其save方法。

被折叠的 条评论
为什么被折叠?



