MethodInterceptorによるAOPの実装
4651 ワード
1.ビジネス・オブジェクト・インタフェースを書き出し、ビジネス・オブジェクトを実装します.
ここに2つの実現を書きます.
2.自分のエージェントを実現し、自分のinterceptorを作成する
3.プロファイル
4.テストコード
public interface Interface {
public void hello();
}
ここに2つの実現を書きます.
public class InterfaceImpl implements Interface {
/**
* @see com.alipay.aop.BusinessInterface#hello()
*/
@Override
public void hello() {
System.out.println("AOP TEST!!");
}
}
public class InterfaceImplTest implements Interface {
/**
* @see aop.Interface#hello()
*/
@Override
public void hello() {
System.out.println("helo world!!");
}
}
2.自分のエージェントを実現し、自分の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);
}
}
}
3.プロファイル
<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>
4.テストコード
public class Main {
/**
*
* @param args
*/
public static void main(String[] args) {
ClassPathResource resource = new ClassPathResource("spring.xml");
XmlBeanFactory beanFactory = new XmlBeanFactory(resource);
Interface bean = (Interface)beanFactory.getBean("bean");
bean.hello();
Interface testBean = (Interface)beanFactory.getBean("testBean");
testBean.hello();
}
}