在这里插入代码片
1.JDK动态代理
public class MyHandler implements InvocationHandler {
private Object target;
public MyHandler(Object target) {
this.target = target;
}
public MyHandler() {
}
public Object getProxyInstance(){
return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("================获取数据库连接==================");
method.invoke(target,args);
System.out.println("===============关闭连接========================");
return null;
}
}
2.spring的cglig代理
public static void main(String[] args) {
UserDao userDao = new UserDaoImpl();
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(userDao.getClass());
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
System.out.println("记录日志");
Object result = method.invoke(userDao, args);
return result;
}
});
UserDao proxy = (UserDaoImpl) enhancer.create();
proxy.saveUser();
}