动态代理模拟Spring的AOP
这两天研究了一下Java的动态代理,自己闲着无聊,用动态代理模拟了一下Spring的AOP,代码如下,当然真正的Spring是直接操作二进制文件,很复杂,有兴趣的可以自己研究下。
package cn.bridgeli.aop;
public interface UserService {
void addUser();
}
package cn.bridgeli.aop;
public class UserServiceImpl implements UserService {
public void addUser() {
System.out.println("User add...");
}
}
package cn.bridgeli.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class UserServiceProxy implements InvocationHandler {
private UserService userService;
public UserServiceProxy(UserService userService) {
this.userService = userService;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("User add start...");
Object object = method.invoke(userService, args);
System.out.println("User add end...");
return object;
}
}
package cn.bridgeli.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import org.junit.Test;
public class UserServiceTest {
@Test
public void testAddUser() {
UserService userService = new UserServiceImpl();
InvocationHandler invocationHandler = new UserServiceProxy(userService);
UserService userServiceProxy = (UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(), userService.getClass().getInterfaces(), invocationHandler);
userServiceProxy.addUser();
}
}
全文完,如果本文对您有所帮助,请花 1 秒钟帮忙点击一下广告,谢谢。
作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/54
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/54
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
分类: Java
近期评论