zoukankan      html  css  js  c++  java
  • Spring AOP创建BeforeAdvice和AfterAdvice实例

     BeforeAdvice

      1、会在目标对象的方法执行之前被调用。

       2、通过实现MethodBeforeAdvice接口来实现。

       3、该接口中定义了一个方法即before方法,before方法会在目标对象target之前执行。

    AfterAdvice

         1、在目标对象的方法执行之后被调用

         2、通过实现AfterReturningAdvice接口实现

    实现目标:

            在方法之前调用执行某个动作。

    IHello 和Hello:

    public interface IHello {
       public void sayHello(String str);
    }
    public class Hello implements IHello {
        @Override
        public void sayHello(String str) {
        	System.out.println("你好"+str);
        }
    }
    

    SayBeforeAdvice:

    public class SayBeforeAdvice implements MethodBeforeAdvice {
    
    	@Override
    	public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
    		// TODO Auto-generated method stub
           System.out.println("在方法执行前做事情!");
    	}
    
    }
    

    SayAfterAdvice文件:

    public class SayAfterAdvice implements AfterReturningAdvice {
    
    	@Override
    	public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {
    		// TODO Auto-generated method stub
    	    System.out.println("在方法执行后做事情!");
    	}
    
    }
    

      

    applicationContext.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" 
    "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
    <beans>
        <!-- 建立目标对象实例 -->
    	<bean id="bean_hello" class="com.pb.Hello" />
    	<!-- 创建执行前advice实例 -->
    	<bean id="sba" class="com.pb.SayBeforeAdvice" />
    	<!-- 创建执行后advice实例 -->
    	<bean id="sfa" class="com.pb.SayAfterAdvice" />
    	<!-- 建立代理对象 -->
    	<bean id="helloProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
    	    <!-- 设置代理的接口 -->
    	    <property name="proxyInterfaces">
    			<value>com.pb.IHello</value>
    		</property>
    		<!-- 设置目标对象实例 -->
    		<property name="target">
    			<ref bean="bean_hello"/>
    		</property>
    		<!-- 设置Advice实例 -->
    		<property name="interceptorNames">
    			<list>
    			 	<value>sba</value>
    			 	<value>sfa</value>
    			</list>
    		</property>
    	</bean>
    </beans>
    

      

    Main执行:

    public static void main(String[] args) {
    		// TODO Auto-generated method stub
    	    ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
    	    
    	    IHello hello=(IHello)context.getBean("helloProxy");
    	    hello.sayHello("访客");
    	}
    

      

    执行效果:

  • 相关阅读:
    Ubuntu18.04下cuda和cudnn安装
    NVIDIA显卡驱动安装
    ultraiso(软碟通)制作u盘启动盘
    [转载]如何根据相机的参数知道摄像机的内参数矩阵
    C++ Primer : 第十三章 : 拷贝控制之拷贝、赋值与销毁
    用栈操作实现队列的操作
    C++ Primer : 第十二章 : 文本查询程序
    C++ Primer : 第十二章 : 动态内存之allocator类
    C++ Primer : 第十二章 : 动态内存之动态数组
    C++ Primer : 第十二章 : 动态内存之unique_ptr和weak_ptr
  • 原文地址:https://www.cnblogs.com/schangxiang/p/11145175.html
Copyright © 2011-2022 走看看