import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class JDKProxyFactory implements InvocationHandler{
private 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 proxy, Method method, Object[] args)
throws Throwable {
PersonServiceBean bean = (PersonServiceBean) this.targetObject;
Object result = null;
if(bean.getUser()!=null){
//advice()-->前置通知
try {
method.invoke(targetObject, args);
//afteradvice()-->后置通知
} catch (Exception e) {
//exceptionadvice()-->例外通知
}finally{
//finallyadvice()-->最终通知
}
}
return result;
}
}
public interface PersonService {
public void save(String name);
public void update(String name,Integer personId);
public String getPersonName(Integer personId);
}
public class PersonServiceBean implements PersonService {
private String user = null;
public PersonServiceBean(){
}
public String getUser() {
return user;
}
public PersonServiceBean(String user){
this.user = user;
}
@Override
public String getPersonName(Integer personId) {
System.out.println("我是 getPersonName方法");
return "salyfan";
}
@Override
public void save(String name) {
System.out.println("我是save()方法");
}
@Override
public void update(String name, Integer personId) {
System.out.println("我是update()方法");
}
}
@Test
public void aopJDKProxyFactory(){
JDKProxyFactory factory = new JDKProxyFactory();
PersonService service = (PersonService) factory.createProxyIntance(new PersonServiceBean(""));
service.getPersonName(2);
}