@Test public void proxyTest2() { CGlibProxyFactory factory = new CGlibProxyFactory(); PeopleServiceBean peopleServiceBean = (PeopleServiceBean) factory.createProxyInstance(new PeopleServiceBean("张三")); peopleServiceBean.save("hello"); }
package com.tiger.aop; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import com.tiger.service.impl.PeopleServiceBean; public class CGlibProxyFactory implements MethodInterceptor { private Object targetObject; public Object createProxyInstance(Object targetObject) { this.targetObject = targetObject; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(this.targetObject.getClass());//非final enhancer.setCallback(this); return enhancer.create(); } public Object intercept(Object proxy, Method method, Object[] args,MethodProxy methodProxy) throws Throwable { PeopleServiceBean bean = (PeopleServiceBean) this.targetObject; Object result = null; if(bean.getUser() != null) { result = methodProxy.invoke(targetObject, args); } return result; } }
package com.tiger.service.impl; import com.tiger.service.PeopleService; public class PeopleServiceBean implements PeopleService { private String user = null; public PeopleServiceBean(){} public PeopleServiceBean(String user) { this.user = user; } public void save(String name) { System.out.println("我是save()方法"); } public void update(String name, Integer peopleid) { System.out.println("我是update()方法"); } public String getPeopleName(Integer peopleid) { System.out.println("我是getPeopleName()方法"); return "xxx"; } public String getUser() { return user; } }