zoukankan      html  css  js  c++  java
  • spring-AOP-ProxyFactoryBean代理的实例

    1.一个代理模式的实例 通过 Proxy类进行代理

    wait.java

    //定义一个接口
    public interface wait {
        void say();
    }



    //
    目标对象实现接口并重写方法 public class waiter implements wait { @Override public void say() { // TODO Auto-generated method stub System.out.println("先生"); } }


    public
    class SayHelloBeforemale implements MethodBeforeAdvice {//实现相应增强类的接口 @Override public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable { //arg0 是 目标类的方法 arg1是目标类的入参数 arg2是目标类实例 发生异常则抛给Throwable // TODO Auto-generated method stub System.out.println("hello"); } }

    UnitTest.java

    public class UnitTest {
            //实明变量
        private SayHelloBeforemale male ;
        private waiter wait;
        private ProxyFactory xy;
        @Before
        public void init(){
                  //实例化并赋值
            male = new SayHelloBeforemale();
            wait = new waiter();
            xy = new ProxyFactory();
                 //设置目标对象
            xy.setTarget(wait);
                //设置增强类对象
            xy.addAdvice(male);
            
        }
        @Test
        public void test(){
                   //
            waiter w = (waiter)xy.getProxy();
            w.say();
        }
                                        

    2.通过spring的配置文件进行代理

      这个方法进行代理所需的类和上面的 wait接口 和 它的实现类waiter 还有sayhelloadvice类

      不同之处在于不是使用 ProxtyFactory来进行代理目标对象,而是通过Schema 的xml文件进行配置代理。

    beans.xml

    <bean id="sayhelloadvice" class="test3.SayHelloBeforemale"/>
        <bean id="target" class="test3.waiter"/>
        <bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean"
            p:proxyInterfaces="test3.wait"
            p:interceptorNames="sayhelloadvice"
            p:target-ref="target"
        />

    - target:代理的目标对象 

    - proxyInterfaces:代理所需要实现的接口,可以多个接口。该属性还有一个别名是Interfaces

    - interceptorNames:需要植入目标对象的bean列表。采用bean的名称指定。这些bean必须实现类 org.aopalliance.intercept.MethodInterceptor

            或 org.springframework.aop.Advisor的bean ,配置中的顺序对应调用的顺序。

    - proxyTargetClass:是否对类进行代理(而不是进行对接口进行代理),设置为true时,使用CGLib代理,且proxyInterfaces属性被ProxyFactoryBean忽略。

    UnitTest.java

    public class UnitTest { 
        @Test //测试在spring 通过ProxyFactoryBean 配置代理
        public void test2(){
            ApplicationContext a = new ClassPathXmlApplicationContext("test3/beans.xml");
            wait w = (wait)a.getBean("waiter");
            w.say();
        }
    }    
  • 相关阅读:
    单机安装hadoop+hive+presto
    java ListMap使用多个key比较
    java多线程-3-使用多线程的时机
    java多线程-2-概念和实现机制
    mysql的varchar和oracle的varchar2比较
    js-对象创建
    java关于json的一些问题
    spring使用RedisCacheManager管理key的一些问题
    如何提高工作效率
    关系数据库之-事务
  • 原文地址:https://www.cnblogs.com/tjc1996/p/5720447.html
Copyright © 2011-2022 走看看