AOP动态代理cglib方式实现
如果没有实现接口,前面那种JDK实现方式就不行了,但可以使用CGLIB这种方式,他是利用继承方式实现的,是目标类的子类.
代码如下:
package com.test.aop;import java.lang.reflect.Method;import com.sun.corba.se.spi.ior.MakeImmutable;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class ProxyCglib implements MethodInterceptor{private Object target;public Object createProxyObject(Object target){this.target=target;Enhancer enhancer=new Enhancer();enhancer.setSuperclass(this.target.getClass());//子类,继承了所有非final的方法enhancer.setCallback(this);return enhancer.create();}public Object intercept(Object proxy, Method method, Object[] args,MethodProxy methodProxy) throws Throwable {UserService service=(UserService)this.target;Object result=null;if(service.getUser()!=null){try {result = methodProxy.invoke(target, args);} catch (Exception e) {// 在这执行}}return result;}}