使用Spring的ProxyFactoryBean来拦截方法
先编写一个类这个类要implements MethodBeforeAdvice在这里我定义了一个MinstrelAdvice类implements MethodBeforeAdvice
MethodBeforeAdvice位置是org.springframework.aop.MethodBeforeAdvice
然后配置applicationContext.xml文件
使用ProxyFactoryBean来拦截Knight子类中的方法,定义interceptorNames属性让minstrel先处理请求,再定义target属性让knightTarget处理,这样我们就可以在使用Knight接口的子类时做一些提前的外理了,比如获得日志类Logger和不拦截的状态下所调用的方法.
先编写一个类这个类要implements MethodBeforeAdvice在这里我定义了一个MinstrelAdvice类implements MethodBeforeAdvice
MethodBeforeAdvice位置是org.springframework.aop.MethodBeforeAdvice
public class MinstrelAdvice implements MethodBeforeAdvice {
public void before(Method method, Object[] obj, Object target)
throws Throwable {
Knight knight = (Knight) target;
Logger song = Logger.getLogger(target.getClass());
System.out.println("MinstrelAdvice running.........");
song.debug("Brave " + knight.getName() + " did " + method.getName());
}
}
然后配置applicationContext.xml文件
<bean id="quest" class="com.springinaction.chapter01.knight.HolyGrailQuest"></bean>
<bean id="knightTarget" class="com.springinaction.chapter01.knight.KnightOfTheRoundTable">
<constructor-arg>
<value>Bedivere</value>
</constructor-arg>
<property name="quest">
<ref bean="quest"/>
</property>
</bean>
<bean id="new" class="com.springinaction.chapter01.knight.New"></bean>
<bean id="minstrel" class="com.springinaction.chapter01.knight.MinstrelAdvice">
</bean>
<bean id="knight" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<list><!-- 拦截Knight的方法 是一个接口类 -->
<value>com.springinaction.chapter01.knight.Knight</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>minstrel</value><!-- 先让minstrel处理请求 -->
</list>
</property>
<property name="target">
<ref bean="knightTarget"/> <!-- 再让knightTarget处理 -->
</property>
</bean>
使用ProxyFactoryBean来拦截Knight子类中的方法,定义interceptorNames属性让minstrel先处理请求,再定义target属性让knightTarget处理,这样我们就可以在使用Knight接口的子类时做一些提前的外理了,比如获得日志类Logger和不拦截的状态下所调用的方法.