JDK动态代理是java.lang.reflect.*包下的,它必须借助一个接口才能产生代理对象,Spring默认使用JDK动态代理实现AOP
一、创建切面类
public class MyAspect {
public void check(){
System.out.println ("权限控制");
}
public void except(){
System.out.println ("异常处理");
}
public void log(){
System.out.println ("日志记录");
}
public void monitor(){
System.out.println ("性能监测");
}
}
二、创建目标类
创建一个目标类接口,并且实现接口
public interface UserService {
void update();
void delete();
}
实现类
public class UserServiceImpl implements UserService {
@Override
public void update() {
System.out.println ("修改");
}
@Override
public void delete() {
System.out.println ("删除");
}
}
三、创建代理类
public class JdkDynamic implements InvocationHandler {
@Autowired
private UserService service;
public Object createProxy(UserService service ){
this.service=service;
//获取类加载器
ClassLoader classLoader = JdkDynamic.class.getClassLoader ();
//获取目标对象所有实现类的接口
Class[] interfaces = service.getClass ().getInterfaces ();
Object o = Proxy.newProxyInstance (classLoader, interfaces, this);
return o;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
MyAspect myAspect = new MyAspect ();
myAspect.check ();
Object invoke = method.invoke (service,args);
myAspect.log ();
return invoke;
}
}
四、测试结构
public static void main(String[] args) {
JdkDynamic jdkDynamic = new JdkDynamic ();
UserService user = new UserServiceImpl ();
UserService proxy = (UserService) jdkDynamic.createProxy (user);
proxy.update ();
}