话不多说直接上代码
Service接口
package Service;
public interface UserService {
void user();
}
Service实现类
package Service.Impl;
import Service.UserService;
public class UserServiceImpl implements UserService {
public void user() {
System.out.println("原来的功能");
}
}
代理对象
package Proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class UserServiceProxy implements InvocationHandler {
private Object o;//真实的对象
public UserServiceProxy(Object object) {
this.o = object;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("原来功能前要增加的功能:--------before");
Object invoke = method.invoke(o, args); //执行对象的方法
System.out.println("原来功能后要增加的功能:--------after");
return invoke;
}
public static Object createJdkProxy(Object currentObj) {
return Proxy.newProxyInstance(currentObj.getClass().getClassLoader(),
currentObj.getClass().getInterfaces(),
new UserServiceProxy(currentObj));
}
}
测试
import Service.Impl.UserServiceImpl;
import Service.UserService;
import static Proxy.UserServiceProxy.createJdkProxy;
public class Test {
public static void main(String[] args) throws Exception {
//1.这里类似于spring,简写哈:Spring - BeanDefine 根据里面的class信息进行反射创建对象
Class userServiceClass = UserServiceImpl.class;
UserServiceImpl userService = userServiceClass.newInstance();
//这里相当于spring的bean对象,现在要在service方法前后增加日志,所以要用aop, 调用bean的后置处理器
//创建代理对象 - 并返回,此时bean工厂里面的实例就是该代理对象
UserService userServiceProxy = (UserService) createJdkProxy(userService);
//调用方法
userServiceProxy.user();
}
}



