您的位置:首页 > 编程语言

模拟AOP 面向切面编程

2013-12-19 16:21 106 查看
模拟AOP 面向切面编程

假设我们有个类UserDAO 里面有个save方法我们现在要在这个方法前加一个日志

当然我们可以创建一个日志类,然后将测试代码组合到源代码,不过这样已经改动了源代码了

所以我们用动态代理来解决这个问题

LogInterceptor.java===============

public class LogInterceptor implements InvocationHandler {

private Object target;

public Object getTarget() {

return target;

}

public void setTarget(Object target) {

this.target = target;

}

public void beforeMethod(Method m) {

System.out.println(m.getName() + " start");

}

public Object invoke(Object proxy, Method m, Object[] args)

throws Throwable {

beforeMethod(m);

m.invoke(target, args);

return null;

}

}

UserDAOImple.java=====================

public class UserDAOImpl implements UserDAO {

public void save(User user) {

System.out.println("user saved!");

}

public void delete() {

System.out.println("user deteleted");

}

}

Test.java========================用于测试.

public void testProxy() {

UserDAO userDAO = new UserDAOImpl();

LogInterceptor li = new LogInterceptor();

li.setTarget(userDAO);

UserDAO userDAOProxy = (UserDAO)Proxy.newProxyInstance(userDAO.getClass().getClassLoader(), userDAO.getClass().getInterfaces(), li);

System.out.println(userDAOProxy.getClass());

userDAOProxy.delete();

userDAOProxy.save(new User());

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: