AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。比如说日志、安全、缓存等那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码
AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”
代理的两种方式:
1、静态代理
AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”
代理的两种方式:
1、静态代理
针对一个接口编写一个代理类
/** * 代理类和目标做的事情是一样的,所以实现相同的接口. * @author Summer * */ public class UserManagerImplProxy implements UserManager { //目标引用. private UserManager userManager; //通过构造方法传递过来. public UserManagerImplProxy(UserManager userManager) { this.userManager = userManager; } @Override public void addUser(String username, String password) { checkSecurity(); userManager.addUser(username, password); } @Override public void delUser(int userId) { // TODO Auto-generated method stub checkSecurity(); userManager.delUser(userId); } @Override public String findUserById(int userId) { checkSecurity(); return userManager.findUserById(userId); } @Override public void modifyUser(int userId, String username, String password) { checkSecurity(); userManager.modifyUser(userId, username, password); } private void checkSecurity() { System.out.println("------------UserManagerImpl.checkSecurity()----"); } }
2、动态代理
1)实现InvocationHandler接口
2)通过反射和产生动态代理的类 java.lang.refect.Proxy为各种接口动态生成相应的代理类
3)重写invoke方法
参考文章一import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class SecurityHandler implements InvocationHandler { private Object targetObject; public Object createProxyInstance(Object targetobject) { this.targetObject = targetobject; //根据目标生成代理. //代理是对接口来说的,是拿到目标的接口.拿到这个接口,实现这个接口. //targetobject这个目标类实现了哪个接口. //返回代理. return Proxy.newProxyInstance(targetobject.getClass().getClassLoader(), targetobject.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //检查安全性. checkSecurity(); //当前方法,调用目标对象的方法. //调用目标方法. Object ret = method.invoke(targetObject, args); return ret; } //检查安全性. private void checkSecurity() { System.out.println("------------UserManagerImpl.checkSecurity()----"); } }