首页 > 代码库 > Spring AOP之 动态代理实例
Spring AOP之 动态代理实例
1.项目结构图如下3.3.3.1:
图3.3.3.1
2.IUserServ接口代码与UserServImpl实现类代码和上述代码相同
3.LogHandler类代码
public class LogHandler implements InvocationHandler {
//目标对象
private Object targetObject;
/**
* 创建动态代理类
* @return object(代理类)
*/
public Object createProxy(Object targetObject){
this.targetObject = targetObject;
return Proxy.newProxyInstance(
targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object obj = null;
try {
beforeLog();
//obj: 目标对象--->代理对象的返回值--->返回给调用者的信息
//this.invoke("目标对象","代理对象给目标对象传递参数");
//调用目标对象中方法
obj = method.invoke(targetObject, args);
afterLog();
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
//日志管理方法
private void beforeLog(){
System.out.println("开始执行");
}
private void afterLog(){
System.out.println("执行完毕");
}
}
4. ActionTest测试类代码:
public class ActionTest {
public static void main(String[] args) {
//创建代理对象iuserServ
LogHandler handler = new LogHandler();
IUserServ iuserServ = (IUserServ)handler.createProxy(new UserServImpl());
iuserServ.deleteUserById(new User());
}
}
5. 运行结果:
开始执行
******执行删除方法******
执行完毕
Spring AOP之 动态代理实例