spring的自动代理的方式

自动创建代理(基于后处理Bean.在Bean创建的过程中完成的增强.生成Bean就是代理.)

BeanNameAutoProxyCreator :按名称生成代理

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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="customerDao" class="cn.aop.CustomerDaoImpl"></bean>
   <bean id="orderDao" class="cn.aop2.OrderDao"></bean>
  <!-- 定义增强 -->
  <bean id="beforeAdvice" class="cn.aop.BeforeAdvice"></bean>
  <bean id="aroundAdvice" class="cn.aop2.AroundAdvice"></bean>
  <!-- 自动代理:按名称的代理基于后处理Bean不需要配置ID ;使用BeanNameAutoProxyCreator类-->
  <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  <property name="beanNames" value="*Dao"/>
  <property name="interceptorNames" value="beforeAdvice"/>
  </bean>
 
   
</beans>

DefaultAdvisorAutoProxyCreator :根据切面中定义的信息生成代理 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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="customerDao" class="cn.aop.CustomerDaoImpl"></bean>
   <bean id="orderDao" class="cn.aop2.OrderDao"></bean>
  <!-- 定义增强 -->
  <bean id="beforeAdvice" class="cn.aop.BeforeAdvice"></bean>
  <bean id="aroundAdvice" class="cn.aop2.AroundAdvice"></bean>

  <!-- 定义一个带有切点的切面 -->
  <bean id="MyPointcutAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
  <property name="pattern" value=".*add"/>
  <property name="advice" ref="aroundAdvice"></property>
  </bean>
  <!-- 基于后处理bean自动生成代理的第二种:DefaultAdvisorAutoProxyCreator类是根据切面中定义的信息生成代理-->
  <!-- 不用写id -->
  <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
 
  </bean>

 
   
</beans>

测试类: 

package cn.defaulter.proxy;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import cn.aop.CustomerDao;
import cn.aop2.OrderDao;
/**
 * 自动代理测试类
 * @author Administrator
 *
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext3.xml")
public class SpringTest {
	@Autowired
	@Qualifier("customerDao")//自动代理注入目标对象
	private CustomerDao customerDao;
	@Autowired
	@Qualifier("orderDao")
	private OrderDao orderDao;
	@Test
	public void test(){
		customerDao.add();
		customerDao.find();
		System.out.println("*******************");
		orderDao.add();
	}
}

 还有一种是:AnnotationAwareAspectJAutoProxyCreator 基于Bean中的AspectJ 注解进行自动代理 

在自动代理之前是通过ProxyFactoryBean生成一个代理类来实现代理;

基于ProxyFattoryBean的代理与自动代理区别?

ProxyFactoryBean:先有被代理对象,将被代理对象传入到代理类中生成代理.

自动代理基于后处理Bean.在Bean的生成过程中,就产生了代理对象,把代理对象返回.生成Bean已经是代理对象.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值