Spring学习-20:Spring的AOP:自动代理
来源:互联网 发布:女朋友胸很大知乎 编辑:程序博客网 时间:2024/06/05 01:06
前面所讲的代理,都必须手动配置。下面来介绍一下自动代理。
前面的案例中,每个代理都是通过ProxyFactoryBean织入切面代理,在实际开发中,非常多的Bean每个都配置ProxyFactoryBean开发维护量巨大。自动创建代理(*****基于后处理Bean.在Bean创建的过程中完成的增强.生成Bean就是代理。)
(1)BeanNameAutoProxyCreator根据Bean名称创建代理
(2)DefaultAdvisorAutoProxyCreator根据Advisor本身包含信息创建代理
*AnnotationAwareAspectJAutoProxyCreator 基于Bean中的AspectJ 注解进行自动代理
之前我们手动创建代理的时候,注意到一点,都是先创建被代理对象,然后在创建代理的时候,传入该被代理对象。
而下面要学习的两种自动代理,是基于后处理bean,在类创建的过程中完成增强,生成的bean,就是代理!
1、如下所示,先清理配置文件中其他部分,留下最简洁的四个bean配置:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 定义目标对象 --><bean id="orderDao" class="com.helloAOP.regexp.OrderDao"></bean><bean id="customerDao" class="com.helloAOP.regexp.CustomerDaoImpl"></bean> <!-- 定义增强 --><bean id="aroundAdvice" class="com.helloAOP.regexp.MyAroundAdvice"></bean><bean id="beforeAdvice" class="com.helloAOP.regexp.MyBeforeAdvice"></bean> </beans>2、下面使用自动代理。如上所述有两种方式,基于名称、基于AspectJ注解信息。2.1、基于名称
<!-- 自动代理:按名称代理 基于后处理bean,后处理bean不需要配置ID--><bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><property name="beanNames" value="*Dao"/><property name="interceptorNames" value="beforeAdvice"/></bean>编写测试类:
package com.helloAOP.autoProxy;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.helloAOP.regexp.OrderDao;public class TestDemo2 {@Testpublic void testDemo(){ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext2.xml");OrderDao orderDao = (OrderDao)applicationContext.getBean("orderDao");orderDao.add();orderDao.update();orderDao.delete();orderDao.find();applicationContext.close();}}运行测试:
成功。
2.2、基于AspectJ注解信息,根据切面中定义的信息来生成代理。
修改配置文件:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 定义目标对象 --><bean id="orderDao" class="com.helloAOP.regexp.OrderDao"></bean><bean id="customerDao" class="com.helloAOP.regexp.CustomerDaoImpl"></bean> <!-- 定义增强 --><bean id="aroundAdvice" class="com.helloAOP.regexp.MyAroundAdvice"></bean><bean id="beforeAdvice" class="com.helloAOP.regexp.MyBeforeAdvice"></bean><!-- 定义一个带有切点的切面 --><bean id="myPointcutAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"><property name="pattern" value=".*add.*"></property><property name="advice" ref="aroundAdvice"></property></bean><!-- 自动代理:--><bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean> </beans>编写测试类:
package com.helloAOP.autoProxy;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.helloAOP.regexp.OrderDao;public class TestDemo3 {@Testpublic void testDemo(){ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext3.xml");OrderDao orderDao = (OrderDao)applicationContext.getBean("orderDao");orderDao.add();orderDao.delete();applicationContext.close();}}
运行测试:
成功。
0 0
- Spring学习-20:Spring的AOP:自动代理
- Spring AOP的自动代理
- spring中AOP的自动代理
- 【Spring AOP】自动创建代理
- Spring AOP 自动创建代理
- Spring-AOP 自动创建代理
- spring aop中单独代理和自动代理的设置
- Spring AOP代理的学习案例
- Spring学习,AOP底层代理
- SPRING源码学习之路(三)——<aop:config>自动代理的实现
- Spring Aop源码学习--Aop代理AopProxy
- Spring AOP之基于AbstractAutoProxyCreator的自动代理
- Spring, 基于自动代理实现aop
- spring aop 自动创建代理BeanNameAutoProxyCreator详解
- 18、spring AOP自动创建代理bean
- Spring AOP 自动代理执行增强
- Spring-AOP 自动创建代理之BeanNameAutoProxyCreator
- Spring-AOP 自动创建代理之DefaultAdvisorAutoProxyCreator
- [常用]按back键退出实现“再按一次退出”的功能两中方式
- 初学PHP
- all数组
- 翻转二叉树
- 判断回文
- Spring学习-20:Spring的AOP:自动代理
- 【python学习笔记】2:收集最多价值奖品问题
- bootstrap-table的toolbar用法自定义增删改查工具容器
- anchors数组
- 链表基础之翻转,删除
- 表单基础
- 框架的创建
- SIM900A与网络调试助手进行TCP收发通信
- Android Studio 创建窗口默认继承Activity而非AppCompatActivity