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 模式导致了应用程序的不同方面(输入逻辑.业 ...
随机推荐
- 在qt的QOpenGLWidget开启opengl的抗锯齿
在QOpenGLWidget的构造函数添加下面几句代码即可 QSurfaceFormat surfaceFormat; surfaceFormat.setSamples();//多重采样 setFor ...
- linux查看网关
Linux下查看网关方法:route -n ip route show traceroute www.prudentwoo.com -s 100 第一行就是自己的默认网关 netstat -r mor ...
- 小程序上传wx.uploadFile - 小程序请假-请求
小程序上传wx.uploadFile UploadTask wx.uploadFile(Object object) 将本地资源上传到服务器.客户端发起一个 HTTPS POST 请求,其中 cont ...
- 1502: [NOI2005]月下柠檬树
一堆圆台平行光的投影 在草稿纸上画一下,发现对于一个圆,它投影完还是一个半径不变的圆. 定义树的轴在投影平面上经过的点为原点,定一个正方向,建立平面直角坐标系, 能发现,对于一个半径为\(r\),高度 ...
- JAVASCRIPT试题及答案
1.用jQuery编程实现获取选中复选框值的函数abc. <body> <input type="checkbox" name="aa" va ...
- 计算机网络&http学习笔记持续整理
http不常见状态码: 204: 请求处理成功,但是没有资源可返回. 206: 只返回请求资源的某一部分(客户端只想请求某一部分),响应报文中包含由Content-Range指定范围的实体内容. 30 ...
- JSP中解决session超时跳转到登陆页面并跳出iframe框架或局部区域的方法
当session会话超时,页面请求被重新定位到了登陆界面.但登录界面在iframe中的解决方案:在登录页面中加入下面的js代码: <script type="text/javascri ...
- java特殊运算符
按位运算符 定义:按位运算符是来操作整数基本数据类型中的单个“比特”(bit),即二进制位,位运算符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果. 分类:与(&).或(|).异或 ...
- legend3---4、lavarel中session使用注意
legend3---4.lavarel中session使用注意 一.总结 一句话总结: session('key',$value)不是存值,是设置默认值,session(['key'=>$val ...
- koa 基础(一)新建/启动 项目
1.创建项目 npm init -y npm install --save koa 2.app.js // 引入模板 var koa = require('koa'); // 实例化 var app ...