Spring AOP学习笔记(一)

短命女 2022-04-11 12:15 350阅读 0赞

AOP使用代理机制

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pjYXdlc29tZQ_size_16_color_FFFFFF_t_70

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

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

20181206121539854.png

JDK动态代理:《查》

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pjYXdlc29tZQ_size_16_color_FFFFFF_t_70 1

动态代理的实现

  1. public class MyJDKProxy implements InvocationHandler {
  2. private UserDao userDao;
  3. public MyJDKProxy(UserDao userDao) {
  4. this.userDao = userDao;
  5. }
  6. // 编写工具方法:生成代理:
  7. public UserDao createProxy(){
  8. UserDao userDaoProxy = (UserDao)
  9. Proxy.newProxyInstance(userDao.getClass().getClassLoader(),
  10. userDao.getClass().getInterfaces(), this);
  11. return userDaoProxy;
  12. }
  13. @Override
  14. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
  15. {
  16. if("save".equals(method.getName())){
  17. System.out.println("权限校验================");
  18. }
  19. return method.invoke(userDao, args);
  20. }
  21. }

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

  1. public class MyCglibProxy implements MethodInterceptor{
  2. private CustomerDao customerDao;
  3. public MyCglibProxy(CustomerDao customerDao){
  4. this.customerDao = customerDao;
  5. }
  6. // 生成代理的方法:
  7. public CustomerDao createProxy(){
  8. // 创建 Cglib 的核心类:
  9. Enhancer enhancer = new Enhancer();
  10. // 设置父类:
  11. enhancer.setSuperclass(CustomerDao.class);
  12. // 设置回调:
  13. enhancer.setCallback(this);
  14. // 生成代理:
  15. CustomerDao customerDaoProxy = (CustomerDao) enhancer.create();
  16. return customerDaoProxy;
  17. }
  18. @Override
  19. public Object intercept(Object proxy, Method method, Object[] args, MethodProxy
  20. methodProxy) throws Throwable {
  21. if("delete".equals(method.getName())){
  22. Object obj = methodProxy.invokeSuper(proxy, args);
  23. System.out.println("日志记录================");
  24. return obj;
  25. }
  26. return methodProxy.invokeSuper(proxy, args);
  27. }
  28. }

AOP术语

" class="reference-link">watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pjYXdlc29tZQ_size_16_color_FFFFFF_t_70 2

Spring整合Junit

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pjYXdlc29tZQ_size_16_color_FFFFFF_t_70 3

20181206121820891.png

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

#

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

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

20181206121841914.png

20181206121850555.png

20181206121858288.png

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pjYXdlc29tZQ_size_16_color_FFFFFF_t_70 4

20181206121916654.png

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

#

#

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

发表评论

表情:
评论列表 (有 0 条评论,350人围观)

还没有评论,来说两句吧...

相关阅读

    相关 spring学习笔记: Spring AOP

    AOP的概念不好解释, 有一大堆的术语都很拗口,还是先看一个代码例子,在src根目录下面新建一个package叫做aop,把这个单元所有的代码都放在这个包里面,有一个接口Boo

    相关 Spring学习笔记 AOP

    AOP,也就是面向方面编程或者说面向面编程,是一种很重要的思想。在企业级系统中经常需要打印日志、事务管理这样针对某一方面的需求,但是传统的面向对象编程无法很好的满足这些需求。因