一般我们可以使用ProxyBeanFactory,并配置proxyInterfaces,target和interceptorNames实现,但如果需要代理的bean很多,无疑会对spring配置文件的编写带来繁重的工作,这时就该BeanNameAutoProxyCreator出场了。

(一)ProxyFactoryBean属性介绍 

target:代理的目标类
proxyInterfaces:代理类应该实现的接口列表
interceptorNames:需要应用到目标对象上的通知Bean的名字.可以是拦截器,advisor和其他通知类型的名字。这个属性必须按照在BeanFactory中的顺序设置
singleton:单例
aopProxyFactory:使用的ProxyFactoryBean实现。Spring带有两种实现(JDK动态代理和CGLIB)。通常不需要使用这个属性
exposeProxy:目标对象是否需要得到当前的代理。通过调用AopContext.getCurrentProxy实现。
frozen:一旦工厂被创建,是否可以修改代理的通知。当设置为true时,在运行时就不能修改ProxyFactoryBean了。通常不需要使用这个属性。
optimize:是否对创建的代理进行优化(只适用于CGLIB)
ProxyTargetClass:是否代理目标类,而不是实现接口。只能在使用CGLIB时使用

现在说下ProxyBeanFactory的用法以及配置:

ITest.class

public interface ITest {
    void tst();
    void tst(int status,String name);
}

TestProxyFactoryBean.class

public class TestProxyFactoryBean implements ITest {

    @Override
    public void tst() {
        // TODO Auto-generated method stub
        System.out.println("执行方法.");
    }     @Override
    public void tst(int status, String name) {
        System.out.println("tst(int status, String name)" );
        
    } }

LoggerAdvice.class

/**
 * 日志代理
 * @author Administrator
 *
 */
public class LoggerAdvice implements MethodBeforeAdvice, AfterReturningAdvice {     @Override
    public void afterReturning(Object returnValue, Method method,
            Object[] args, Object target) throws Throwable {
         Logger logger = Logger.getLogger(target.getClass());
          if(returnValue != null){
              logger.debug("+-------Return : " + returnValue.toString());
          }
        
    }     @Override
    public void before(Method method, Object[] args, Object target)
            throws Throwable {
        // TODO Auto-generated method stub
          Logger logger = Logger.getLogger(target.getClass());
          logger.debug("+Class : "+ target.getClass().getName());
          logger.debug("+-------Method : "+ method.getName());
          for(int i=0; i<args.length; i++){
           logger.debug(" +-arg"+ i + " : " + args[i].toString());
          }
        
    } }

Xml配置:


<bean id="testproxyfactorybean" class="spring.aop.TestProxyFactoryBean" /> 
<bean id="loggerAdvice" class="spring.aop.LoggerAdvice" />
  <bean class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="proxyInterfaces" value="spring.aop.ITest"></property>
    <property name="interceptorNames" >
     <list>
      <value>loggerAdvice</value>
     </list>
    </property>
    <property name="target" ref="testproxyfactorybean"></property>
    </bean>
Program.class
public static void main(String[] args){
        context.getBean("proxyBean",ITest.class).tst();
        context.getBean("proxyBean",ITest.class).tst(1,"123");
    }

执行结果:

2012-08-14 14:57:30 [org.springframework.beans.factory.support.DefaultListableBeanFactory]-[DEBUG] Returning cached instance of singleton bean 'proxyBean'
2012-08-14 14:57:30 [org.springframework.beans.factory.support.DefaultListableBeanFactory]-[DEBUG] Returning cached instance of singleton bean 'loggerAdvice'
2012-08-14 14:57:30 [org.springframework.aop.framework.ProxyFactoryBean]-[DEBUG] Advice has changed; recaching singleton instance
2012-08-14 14:57:30 [org.springframework.aop.framework.JdkDynamicAopProxy]-[DEBUG] Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [spring.aop.TestProxyFactoryBean@11978b]
2012-08-14 14:57:30 [spring.aop.TestProxyFactoryBean]-[DEBUG] +Class : spring.aop.TestProxyFactoryBean
2012-08-14 14:57:30 [spring.aop.TestProxyFactoryBean]-[DEBUG] +-------Method : tst
执行方法.
2012-08-14 14:57:30 [org.springframework.beans.factory.support.DefaultListableBeanFactory]-[DEBUG] Returning cached instance of singleton bean 'proxyBean'
2012-08-14 14:57:30 [spring.aop.TestProxyFactoryBean]-[DEBUG] +Class : spring.aop.TestProxyFactoryBean
2012-08-14 14:57:30 [spring.aop.TestProxyFactoryBean]-[DEBUG] +-------Method : tst
2012-08-14 14:57:30 [spring.aop.TestProxyFactoryBean]-[DEBUG]  +-arg0 : 1
2012-08-14 14:57:30 [spring.aop.TestProxyFactoryBean]-[DEBUG]  +-arg1 : 123
tst(int status, String name)

(二)BeanNameAutoProxyCreator属性介绍 

target:代理的目标类
beanNames:需要代理的bean的列表

interceptorNames:需要应用到目标对象上的通知Bean的名字.可以是拦截器,advisor和其他通知类型的名字。这个属性必须按照在BeanFactory中的顺序设置

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  <property name="interceptorNames">
   <list>
    <value>loggerAdvice</value>
   </list>
  </property>
  <property name="beanNames">
   <list>
    <idref local="testproxyfactorybean" />
   </list>
  </property>
 </bean>

调用代码:

public static void main(String[] args){
        
        context.getBean("testfunc",TestFunc.class).test("project", 100);
        context.getBean("testfunc",TestFunc.class).test1("project1");
    }
aaarticlea/png;base64,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" alt="" />

相关:

使用BeanNameAutoProxyCreator实现spring的自动代理

BeanNameAutoProxyCreator自动创建事务代理

Spring BeanNameAutoProxyCreator 与 ProxyFactoryBean区别的更多相关文章

  1. Spring @Configuration 和 @Component 区别

    Spring @Configuration 和 @Component 区别 一句话概括就是 @Configuration 中所有带 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个 ...

  2. Spring与SpringMVC的区别

    Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring. 简单点的话可以将SpringMVC类比于Strut ...

  3. 【Spring】25、Spring代理。 BeanNameAutoProxyCreator 与 ProxyFactoryBean

    一般我们可以使用ProxyBeanFactory,并配置proxyInterfaces,target和interceptorNames实现,但如果需要代理的bean很多,无疑会对spring配置文件的 ...

  4. 【SSM 1】SpringMVC、Spring和Struts的区别

    导读:近期做到的项目中,用到的框架师SSM(SpringMVC+Spring+Mybatis),那么在这之前用过SSH,这里主要是区分一下SpringMVC和Struts,但是由于SpringMVC和 ...

  5. Spring两种代理区别

    Spring的两种代理JDK和CGLIB的区别浅谈: Java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用invokeHandler类来处理: 而cglib动态代理是利用a ...

  6. [Java语言] 《struts2和spring MVC》的区别_动力节点

    1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...

  7. spring @Value注解#和$区别

    一直以来,在使用@Value注解的时候,都是使用#的风格@Value("#{topic.topicName}"),但是也经常会看到@Value("${topic.topi ...

  8. spring---aop(6)---Spring AOP中ProxyFactoryBean介绍

    写在前面 这篇文章里面就要说说Spring自己的AOP,搞清楚哪种方式是Spring自己实现的AOP,哪种方式是Spring引入aspectj的AOP. 简单例子 Spring自己的AOP实现在于Pr ...

  9. SpringMVC、Spring和Struts的区别

    http://www.cnblogs.com/hhx626/p/6010293.html 导读:近期做到的项目中,用到的框架师SSM(SpringMVC+Spring+Mybatis),那么在这之前用 ...

随机推荐

  1. 利用oneproxy部署mysql数据库的读写分离

    实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 oneproxy-rhel ...

  2. nginx下配置404错误页面

    1.创建自己的404.html页面,并放于网站根目录. 2.更改nginx.conf在http定义区域加入: fastcgi_intercept_errors on; 3.更改nginx.conf(或 ...

  3. 【原】如何改变表单元素的外观(for Webkit and IE10)

    表单元素在网页设计中使用的非常频繁,如文本输入框.单选框.复选框.选择列表.上传文件,它们在浏览器中的展现有自带的外观,为了在视觉上取得更好的产品体验,保持客户端的统一,通常产品经理会提出需要改变它的 ...

  4. 理解ThreadLocal(之二)

    想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理.首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码 ...

  5. AC日记——挤牛奶 洛谷 P1204

    题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...

  6. thinkphp

    U方法: 模板导入后,先在浏览器执行index.php文件,当出现下图时,框架中的内容才可以出现. 增加admin后台文件夹: 连接数据库:可以使用pdo的方式连接

  7. linux ubuntu14 更改为root用户登录

    设置使用root用户登陆首先要修改root的登陆密码sudo passwd root1.输入sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu ...

  8. Leetcode:378. Kth Smallest Element in a Sorted Matrix

    题目: Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the ...

  9. C++学习笔记(2)

    本学习笔记是C++ primer plus(第六版)学习笔记.是C++学习笔记(1)的后续.复习C++基础知识的可以瞄瞄. 转载请注明出处http://www.cnblogs.com/zrtqsk/p ...

  10. Tarjan

    //求强连通分量 void uni(int x,int y){ if (rank[x]<rank[y]){ fa[x]=y; size[y]+=size[x]; }else{ rank[x]+= ...