UserService接口
package cn.bdx.service.intf;
public interface UserService {
public void add();
public void del();
}
UserServiceImpl类:
package cn.bdx.service.impl;
import cn.bdx.service.intf.UserService;
public class UserServiceImpl implements UserService{
@Override
public void add() {
System.out.println("执行添加");
}
@Override
public void del() {
System.out.println("执行删除");
}
}
UserServiceProxy类:
package cn.bdx.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import cn.bdx.service.intf.UserService;
public class UserServiceProxy implements InvocationHandler{
private UserService userService;
public Object newInstance(UserService userService) {
this.userService = userService;
return Proxy.newProxyInstance(UserService.class.getClassLoader(), userService.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("方法开始执行");
Object obj = method.invoke(userService, args);
System.out.println("方法执行结束");
return obj;
}
}
测试类:
import cn.bdx.proxy.UserServiceProxy;
import cn.bdx.service.impl.UserServiceImpl;
import cn.bdx.service.intf.UserService;
public class Test {
public static void main(String[] args) {
UserService userService = new UserServiceImpl();
UserServiceProxy userServiceProxy = new UserServiceProxy();
UserService proxy = (UserService)userServiceProxy.newInstance(userService);
proxy.add();
}
}
实现动态代理的基本上就是为方法添加其他执行的动作,比如这个例子,add方法执行自己的添加动作,但是添加了动态代理之后,可以在add方法执行的过程中添加一些其他的执行动作。这是spring aop实现的原理吧。