Spring AOP学习笔记(一)

AOP使用代理机制

 

AOP可以在不修改源码的情况下对代码进行增强

AOP使用动态代理有阆中实现方式当我们实现了接口的时候Spring会使用JDK动态代理     没有实现接口就会自动切换到  Cglib(类似于Javassit)动态代理    cglib  是生成子类对象来实现的动态代理

JDK动态代理:《查》

动态代理的实现

public class MyJDKProxy implements InvocationHandler {
private UserDao userDao;
public MyJDKProxy(UserDao userDao) {
this.userDao = userDao;
}
// 编写工具方法:生成代理:
public UserDao createProxy(){
UserDao userDaoProxy = (UserDao)
Proxy.newProxyInstance(userDao.getClass().getClassLoader(),
userDao.getClass().getInterfaces(), this);
return userDaoProxy;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
if("save".equals(method.getName())){
System.out.println("权限校验================");
}
return method.invoke(userDao, args);
}
}

 Cglib 动态代理增强一个类中的方法:

public class MyCglibProxy implements MethodInterceptor{
private CustomerDao customerDao;
public MyCglibProxy(CustomerDao customerDao){
this.customerDao = customerDao;
}
// 生成代理的方法:
public CustomerDao createProxy(){
// 创建 Cglib 的核心类:
Enhancer enhancer = new Enhancer();
// 设置父类:
enhancer.setSuperclass(CustomerDao.class);
// 设置回调:
enhancer.setCallback(this);
// 生成代理:
CustomerDao customerDaoProxy = (CustomerDao) enhancer.create();
return customerDaoProxy;
}
@Override
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy
methodProxy) throws Throwable {
if("delete".equals(method.getName())){
Object obj = methodProxy.invokeSuper(proxy, args);
System.out.println("日志记录================");
return obj;
}
return methodProxy.invokeSuper(proxy, args);
}
}

AOP术语

Spring整合Junit

那么Spring最大的作用就是对于我们以后创建对象进行一个简化应为我们,可以直接从我们加载配置文件的时候创建的对象哪里得到对象,那我们得到的都是同一个对象,那赋值的时候会混乱么????

AOP我们先要创建一个切片类里面写上我们需要增强的方法,全部写进去,配置类到SPring里面

后面再通过AOP标签来配置,实现动态代理

AOP模式就是可以通过excution函数的表达式的*  来实现对于不同包下面的同一个方法 以及同一个包下面的方法直接在配置文件里面就可以实现动态代理,在不修改源代码的情况下实现对于功能的修改

excution()函数里面的表达式其实就是我们方法的完整的名字    访问修饰符可用可不要   (public  private.......)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值