Spring原理自我实践之AOP的实现原理
2009-09-18 00:00:00 来源:WEB开发网AOP的简单描述:
面向切面的编程,针对系统中与核心业务关系不是那么紧密的功能。 诸如事务、安全验证、日志等,通过一种机制,将他们分离, 这样能够减弱代码的耦合 ,使逻辑可以清晰分离
实现的方式有三种:
1.编译期间,由java文件生成class文件过程中加入
2.类加载器,由class文件加载到内存过程中加入
3.动态代理和cglib
主要的源码:
Java代码
package com.erong.spring.aop.myaop;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.aop.framework.ProxyFactory;
public class Main {
/**实例说明:
* 通过AOP对模拟系统的注册和登录生成日志打印在控制台
* 每次调用到creat()和login()都会生成日志
* 在代码中没有任何的日志代码
* @param args
*/
public static void main(String[] args) {
UserDao userDao = new UserDao();
UserServiceImpl target = new UserServiceImpl();//创建要拦截的对象
target.setUserDao(userDao);
MethodBeforeAdvice log = new MethodBeforeAdvice() {
public void before(Method m, Object[] args, Object target)
throws Throwable {
System.out.println("调用方法: " + m.getName());
}
};
// UserService userService =
// (UserService)AopProxyFactory.createProxy(target, log);
ProxyFactory factory = new ProxyFactory(target);
factory.addAdvice(log);
UserService userService = (UserService) factory.getProxy();
userService.create("aop", "mypassword");
userService.login("aop", "mypassword");
userService.getAllUser();
// userDao.print();
}
}
更多精彩
赞助商链接