首页 > Java > 动态代理模拟Spring的AOP

动态代理模拟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();
}
}

分享到:
作 者: BridgeLi,http://www.bridgeli.cn/
原文链接:https://www.bridgeli.cn/archives/54
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
分类: Java 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.