使用MethodInterceptor實現AOP

學習筆記

使用MethodInterceptor實現AOP
定義接口

public interface Interface {
    public void hello();
}

兩個實現

  1. 第一個實現
public class InterfaceImpl implements Interface {
    /**
     * @see com.alipay.aop.BusinessInterface#hello()
     */
    @Override
    public void hello() {
        System.out.println("AOP TEST!!");
    }
}
  1. 第二個實現
public class InterfaceImplTest implements Interface {
    /**
     * @see aop.Interface#hello()
     */
    @Override
    public void hello() {
        System.out.println("helo world!!");
    }
}
  1. 實現自己的代理類,創建自己的interceptor
  public class MyInterceptor implements MethodInterceptor {
        /**
         * @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)
         */
        @Override
        public Object invoke(MethodInvocation methodInvocation) throws Throwable {
            String info = methodInvocation.getMethod().getDeclaringClass()+ "." +
            methodInvocation.getMethod().getName() + "()";
            System.out.println(info);
            try{
                Object result = methodInvocation.proceed();
                return result;
            }
            finally{
                System.out.println(info);
            }
        }
  }
  • 定義Spring配置文件

    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:sofa="http://img.alipay.net/dtd/schema/service"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:webflow="http://www.springframework.org/schema/webflow-config"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http://img.alipay.net/dtd/schema/service http://img.alipay.net/dtd/schema/service/sofa-service.xsd
         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
         http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd"
    default-autowire="byName">
    <bean id="beanTarget" class="aop.InterfaceImpl"/>
    <bean id="hello" class="aop.InterfaceImplTest" />
    <bean id="myInterceptor" class="aop.MyInterceptor"/>
    <bean id="bean" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="proxyInterfaces">
            <value>aop.Interface</value>
        </property>
    
        <property name="interceptorNames">
            <list>
                <value>myInterceptor</value>
                <value>beanTarget</value>
            </list>
        </property>
    </bean>
    
      <bean id="testBean" class="org.springframework.aop.framework.ProxyFactoryBean">
          <property name="proxyInterfaces">
              <value>aop.Interface</value>
          </property>
    
          <property name="interceptorNames">
              <list>
                  <value>myInterceptor</value>
                  <value>hello</value>
              </list>
          </property>
      </bean>
    </beans>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章