Spring之Advisor顾问

1. 创建新的xml文件  advisor.xml

  1. <!--01. 配置目标对象 实际肯定是配置UserServiceImpl-->
  2. <bean id="userDaoImpl" class="com.xdf.dao.UserDaoImpl"/>
  3.  
  4. <!--02.配置前置通知-->
  5. <bean id="beforeAdvice" class="com.xdf.advice.BeforeAdvice"/>
  6.  
  7. <!--03.配置工厂-->
  8. <bean id="userProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
  9. <!--配置目标对象-->
  10. <property name="targetName" value="userDaoImpl"/>
  11. <!--配置顾问-->
  12. <property name="interceptorNames" value="myAdvisor"/>
  13. </bean>
  14.  
  15. <!--04.配置顾问myAdvisor-->
  16. <bean id="myAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
  17. <!--配置通知 通知只是顾问的一个属性 -->
  18. <property name="advice" ref="beforeAdvice"/>
  19. <!--配置切入点-->
  20. <!-- <property name="mappedName" value="eat"/>-->
  21. <property name="mappedNames" value="eat,sleep"/>
  22. </bean>

2. 创建测试类

  1. **
  2. * 使用顾问 advisor.xml
  3. */
  4. @Test //前置通知
  5. public void testAdvisor(){
  6. ApplicationContext context=new ClassPathXmlApplicationContext("advisor.xml");
  7. UserDao userDao= context.getBean("userProxy",UserDao.class);
  8. userDao.eat();
  9. userDao.sleep();
  10. }

·可以解决 给指定的主业务方法 增强的问题!

3. 使用正则匹配,创建新的xml文件

    在Dao层增加 ea()和e()!便于我们测试

  1. <!--01. 配置目标对象 实际肯定是配置UserServiceImpl-->
  2. <bean id="userDaoImpl" class="com.xdf.dao.UserDaoImpl"/>
  3.  
  4. <!--02.配置前置通知-->
  5. <bean id="beforeAdvice" class="com.xdf.advice.BeforeAdvice"/>
  6.  
  7. <!--03.配置工厂-->
  8. <bean id="userProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
  9. <!--配置目标对象-->
  10. <property name="targetName" value="userDaoImpl"/>
  11. <!--配置顾问-->
  12. <property name="interceptorNames" value="myAdvisor"/>
  13. </bean>
  14.  
  15. <!--04.配置顾问myAdvisor RegexpMethodPointcutAdvisor -->
  16. <bean id="myAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
  17. <!--配置通知 通知只是顾问的一个属性 -->
  18. <property name="advice" ref="beforeAdvice"/>
  19. <!--配置切入点 使用正则表达式
  20. com.xdf.dao.UserDaoImpl.eat 务必使用类名+方法名
  21. . 代表任意单个字符
  22. * 代表.字符出现的次数是0-N
  23. ?:0 -1
  24. +: 1-N
  25. -->
  26. <property name="patterns">
  27. <array>
  28. <!-- <value>.*e.*</value> 匹配 eat 和sleep-->
  29. <!-- <value>com.xdf.dao.UserDaoImpl.ea.?</value>匹配 eat 和ea-->
  30. <value>com.xdf.dao.UserDaoImpl.*e.*</value> <!--匹配 eat 和ea e-->
  31. </array>
  32. </property>

</bean>
<!--还是一个问题没解决    一个工厂只能操作一个对象-->

4. 创建测试类

  1. /**
  2. * 使用顾问 regex.xml
  3. */
  4. @Test //前置通知
  5. public void testRegex(){
  6. ApplicationContext context=new ClassPathXmlApplicationContext("regex.xml");
  7. UserDao userDao= context.getBean("userProxy",UserDao.class);
  8. userDao.eat();
  9. userDao.ea();
  10. userDao.e();
  11. userDao.sleep();
  12. }

    各位亲,这个办法你想到了吗?!接下来的我还会继续更新的哦!

Spring(十)--Advisor顾问的更多相关文章

  1. 关于spring aop Advisor排序问题

    关于spring aop Advisor排序问题 当我们使用多个Advisor的时候有时候需要排序,这时候可以用注解org.springframework.core.annotation.Order或 ...

  2. 学习 Spring (十五) Advisor

    Spring入门篇 学习笔记 advisor 就像一个小的自包含的方面,只有一个 advice 切面自身通过一个 bean 表示,并且必须实现某个 advice 接口,同时 advisor 也可以很好 ...

  3. Spring 通知和顾问进行增强

    使用顾问增加前置增强和后置增强 <bean id="1" class="目标对象"></bean> <bean id=" ...

  4. 学习 Spring (十六) AOP API

    Spring入门篇 学习笔记 Spring AOP API 是 Spring 1.2 历史用法,现在仍然支持 这是 Spring AOP 基础,现在的用法也是基于历史的,只是更简便了 Pointcut ...

  5. Spring(十)Spring任务调度

    一.计划任务 需要定时执行一些计划(定时更新等),这样的计划称之为计划任务 Spring抽象封装了Java提供的Timer与TimerTask类 也可以使用拥有更多任务计划功能的Quartz 二.Ti ...

  6. 学习 Spring (十四) Introduction

    Spring入门篇 学习笔记 Introduction 允许一个切面声明一个实现指定接口的通知对象,并且提供了一个接口实现类来代表这些对象 由 中的 元素声明该元素用于声明所匹配的类型拥有一个新的 p ...

  7. 学习 Spring (十二) AOP 基本概念及特点

    Spring入门篇 学习笔记 AOP: Aspect Oriented Programming, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 主要功能是:日志记录.性能统计.安全控 ...

  8. 学习 Spring (十) 注解之 @Bean, @ImportResource, @Value

    Spring入门篇 学习笔记 @Bean @Bean 标识一个用于配置和初始化一个由 Spring IoC 容器管理的新对象的方法,类似于 XML 配置文件的 可以在 Spring 的 @Config ...

  9. Spring(十六)之MVC框架

    MVC 框架教程 Spring web      MVC 框架提供了模型-视图-控制的体系结构和可以用来开发灵活.松散耦合的 web 应用程序的组件.MVC 模式导致了应用程序的不同方面(输入逻辑.业 ...

随机推荐

  1. linux系统装机分区

  2. 通用DES加密解密方法

    /// <summary> /// DES加密方法 /// </summary> /// <param name="strPlain">明文&l ...

  3. 51 Nod 1134 最长递增子序列(经典问题回顾)

    1134 最长递增子序列  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元 ...

  4. python学习之路(2)(渗透信息收集)

    scapy的用法 通过目标ip的回复判断目标ip主机的情况 先写上三层的IP 四层的TCP 然后r.display看一下我们的包 src是源ip dst是目标ip 我们添加目标ip 这里是网关的ip ...

  5. Understand RNN with TensorFlow in 7 Steps

    待翻译 https://medium.com/@erikhallstrm/hello-world-rnn-83cd7105b767

  6. 实现一个成熟的底层毛玻璃效果(纯CSS)

    写在前面 毛玻璃背景是一个很常见的网页样式,想要实现,其实并不难,但经过我在网上的搜索发现,大量实现方法都较为不规范,且把问题复杂化了(例如各种z-index属性和position的定位)现提供一个代 ...

  7. React 开发中面临的九个重要抉择

    抉择系列:在技术开发的过程中我们会面临着各种各样的抉择,我们在不同情境下该如何选择恰当的技术,这是本系列文章想要解决的问题. 在 React 开发的过程中我们常常会遇到一些抉择,下面我将选取其中一些个 ...

  8. Idea如何生成JPA的相关model,以及运行JPA项目的时候启动错误

    1.如何生成JPAmodel 按照顺序执行下面的步骤 为指定的项目添加JPA的配置,这样之后生成的model就会在指定的项目内 选择JPA之后默认不用操作直接添加 没有Persistence的可以在w ...

  9. IDEA 无法自动导入相关Maven jar包

    仔细看看项目右边有个很骚的"Maven Projects"按钮,点击一下 再点击这个刷新按钮,现在知道技术为何物了吗?

  10. beta week 1/2 Scrum立会报告+燃尽图 03

    本次作业要求参见:edu.cnblogs.com/campus/nenu/2019fall/homework/9913 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名:胜利点 二.S ...