package cn.yourcompany.service; public interface PersonService { public String getPersonName(Integer personid); public void save(String name); public void update(String name, Integer personid); }
package cn.yourcompany.service.impl; import cn.yourcompany.service.PersonService; public class PersonServiceBean implements PersonService { private String user = null; public PersonServiceBean(String user) { this.user = user; } public PersonServiceBean() { } public String getPersonName(Integer personid) { if (user != null) { System.out.println("我是getPersonName()方法"); } return "xxx"; } public void save(String name) { if (user != null) { System.out.println("我是save()方法"); } } public void update(String name, Integer personid) { if (user != null) { System.out.println("我是update()方法"); } } public String getUser() { return user; } }
package cn.yourcompany.aop; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import cn.yourcompany.service.impl.PersonServiceBean; public class JDKProxyFactory implements InvocationHandler { private Object targetObject; public Object createProxyInstance(Object targetObject) { this.targetObject = targetObject; return Proxy.newProxyInstance(this.targetObject.getClass() .getClassLoader(), this.targetObject.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { PersonServiceBean bean = (PersonServiceBean) targetObject; Object result=null; if (bean.getUser() != null) { result = method.invoke(targetObject, args); } return result; } }
package junit.test; import org.junit.Test; import cn.yourcompany.aop.JDKProxyFactory; import cn.yourcompany.service.PersonService; import cn.yourcompany.service.impl.PersonServiceBean; public class JDKProxyTest { @Test public void testJDKProxy() { JDKProxyFactory factory=new JDKProxyFactory(); PersonService service = (PersonService)factory.createProxyInstance(new PersonServiceBean("sss")); service.save("sss"); } }