Spring(十)--Advisor顾问
Spring之Advisor顾问
1. 创建新的xml文件 advisor.xml
<!--01. 配置目标对象 实际肯定是配置UserServiceImpl-->
<bean id="userDaoImpl" class="com.xdf.dao.UserDaoImpl"/> <!--02.配置前置通知-->
<bean id="beforeAdvice" class="com.xdf.advice.BeforeAdvice"/> <!--03.配置工厂-->
<bean id="userProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<!--配置目标对象-->
<property name="targetName" value="userDaoImpl"/>
<!--配置顾问-->
<property name="interceptorNames" value="myAdvisor"/>
</bean> <!--04.配置顾问myAdvisor-->
<bean id="myAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<!--配置通知 通知只是顾问的一个属性 -->
<property name="advice" ref="beforeAdvice"/>
<!--配置切入点-->
<!-- <property name="mappedName" value="eat"/>-->
<property name="mappedNames" value="eat,sleep"/>
</bean>
2. 创建测试类
**
* 使用顾问 advisor.xml
*/
@Test //前置通知
public void testAdvisor(){
ApplicationContext context=new ClassPathXmlApplicationContext("advisor.xml");
UserDao userDao= context.getBean("userProxy",UserDao.class);
userDao.eat();
userDao.sleep();
}
·可以解决 给指定的主业务方法 增强的问题!
3. 使用正则匹配,创建新的xml文件
在Dao层增加 ea()和e()!便于我们测试
<!--01. 配置目标对象 实际肯定是配置UserServiceImpl-->
<bean id="userDaoImpl" class="com.xdf.dao.UserDaoImpl"/> <!--02.配置前置通知-->
<bean id="beforeAdvice" class="com.xdf.advice.BeforeAdvice"/> <!--03.配置工厂-->
<bean id="userProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<!--配置目标对象-->
<property name="targetName" value="userDaoImpl"/>
<!--配置顾问-->
<property name="interceptorNames" value="myAdvisor"/>
</bean> <!--04.配置顾问myAdvisor RegexpMethodPointcutAdvisor -->
<bean id="myAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<!--配置通知 通知只是顾问的一个属性 -->
<property name="advice" ref="beforeAdvice"/>
<!--配置切入点 使用正则表达式
com.xdf.dao.UserDaoImpl.eat 务必使用类名+方法名
. 代表任意单个字符
* 代表.字符出现的次数是0-N
?:0 -1
+: 1-N
-->
<property name="patterns">
<array>
<!-- <value>.*e.*</value> 匹配 eat 和sleep-->
<!-- <value>com.xdf.dao.UserDaoImpl.ea.?</value>匹配 eat 和ea-->
<value>com.xdf.dao.UserDaoImpl.*e.*</value> <!--匹配 eat 和ea e-->
</array>
</property>
</bean>
<!--还是一个问题没解决 一个工厂只能操作一个对象-->
4. 创建测试类
/**
* 使用顾问 regex.xml
*/
@Test //前置通知
public void testRegex(){
ApplicationContext context=new ClassPathXmlApplicationContext("regex.xml");
UserDao userDao= context.getBean("userProxy",UserDao.class);
userDao.eat();
userDao.ea();
userDao.e();
userDao.sleep();
}
各位亲,这个办法你想到了吗?!接下来的我还会继续更新的哦!
Spring(十)--Advisor顾问的更多相关文章
- 关于spring aop Advisor排序问题
关于spring aop Advisor排序问题 当我们使用多个Advisor的时候有时候需要排序,这时候可以用注解org.springframework.core.annotation.Order或 ...
- 学习 Spring (十五) Advisor
Spring入门篇 学习笔记 advisor 就像一个小的自包含的方面,只有一个 advice 切面自身通过一个 bean 表示,并且必须实现某个 advice 接口,同时 advisor 也可以很好 ...
- Spring 通知和顾问进行增强
使用顾问增加前置增强和后置增强 <bean id="1" class="目标对象"></bean> <bean id=" ...
- 学习 Spring (十六) AOP API
Spring入门篇 学习笔记 Spring AOP API 是 Spring 1.2 历史用法,现在仍然支持 这是 Spring AOP 基础,现在的用法也是基于历史的,只是更简便了 Pointcut ...
- Spring(十)Spring任务调度
一.计划任务 需要定时执行一些计划(定时更新等),这样的计划称之为计划任务 Spring抽象封装了Java提供的Timer与TimerTask类 也可以使用拥有更多任务计划功能的Quartz 二.Ti ...
- 学习 Spring (十四) Introduction
Spring入门篇 学习笔记 Introduction 允许一个切面声明一个实现指定接口的通知对象,并且提供了一个接口实现类来代表这些对象 由 中的 元素声明该元素用于声明所匹配的类型拥有一个新的 p ...
- 学习 Spring (十二) AOP 基本概念及特点
Spring入门篇 学习笔记 AOP: Aspect Oriented Programming, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 主要功能是:日志记录.性能统计.安全控 ...
- 学习 Spring (十) 注解之 @Bean, @ImportResource, @Value
Spring入门篇 学习笔记 @Bean @Bean 标识一个用于配置和初始化一个由 Spring IoC 容器管理的新对象的方法,类似于 XML 配置文件的 可以在 Spring 的 @Config ...
- Spring(十六)之MVC框架
MVC 框架教程 Spring web MVC 框架提供了模型-视图-控制的体系结构和可以用来开发灵活.松散耦合的 web 应用程序的组件.MVC 模式导致了应用程序的不同方面(输入逻辑.业 ...
随机推荐
- ubuntu1804 安装Nvidia驱动-nvidia-docker
操作 看显卡 lspci | grep N 01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2) 0 ...
- MHA配置
1,背景 MHA的目的在于维持MySQL Replication中Master库的高可用性,其最大特点是可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致,然后从中选择一个充当新的 ...
- 6、Lambda表达式(推荐使用)
Lambda表达式(匿名的函数对象),是C++11增加的新特性,Qt配合信号一起使用,非常方便. pro项目文件中引入了这种特性: CONFIG += c++11 通过connect来了解Lambda ...
- MCMC
MCMC MCMC算法的核心思想是我们已知一个概率密度函数,需要从这个概率分布中采样,来分析这个分布的一些统计特性,然而这个这个函数非常之复杂,怎么去采样?这时,就可以借助MCMC的思想. 它与变分自 ...
- 「雅礼集训 2017 Day5」远行
题目链接 问题分析 要求树上最远距离,很显然就想到了树的直径.关于树的直径,有下面几个结论: 如果一棵树的直径两个端点为\(a,b\),那么树上一个点\(v\)开始的最长路径是\(v\rightarr ...
- sublime text 3设置
Sublime text 3 中文文件名显示方框怎么解决? 如图,中文文件名打开全是乱码,内容倒是装了converttoutf8没什么太大的问题. 作者:凝空虚步链接:https://www.zhih ...
- Hibernate动态条件查询(Criteria Query)
1.创建一个Criteria实例net.sf.hibernate.Criteria这个接口代表对一个特定的持久化类的查询.Session是用来制造Criteria实例的工厂. Criteria cri ...
- Java多线程核心知识
多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲.在平时工作中如若使用不当会出现数据错乱.执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关 ...
- ANR错误分析
链接1:https://www.cnblogs.com/xiyuan2016/p/6740623.html 链接2:https://www.jianshu.com/p/3959a601cea6
- wls12C启用Gzip
https://community.oracle.com/message/14109820 https://docs.oracle.com/middleware/1221/wls/NOTES/what ...