Spring的通知类型:
- Around org.aopalliance.intercept.MethodInterceptor 拦截对目标对象的方法调用
- Before org.springframework.aop.BeforeAdvice 在目标方法被调用之前调用
- After org.springframework.aop.AfterReturningAdvice 在目标方法被调用之后调用
- Throws org.springframework.aop.ThrowsAdvice 当目标方法抛出异常时调用
切面Advice:
package advice;
import java.lang.reflect.Method;
import org.apache.log4j.Logger;
import org.springframework.aop.MethodBeforeAdvice;
import service.HelloService;
import service.HelloServiceImpl;
public class HelloAdvice implements MethodBeforeAdvice {
public void before(Method method, Object[] args, Object target) throws Throwable {
HelloService hello = (HelloServiceImpl)target;
Logger log = Logger.getLogger(target.getClass());
log.debug("Before Class:" + hello.getClass().getName() + "'s " + method.getName());
}
}
Spring配置文档:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="helloDao" class="dao.HelloDaoImpl"> <property name="helloworld" value="Hello World!" /> </bean> <bean id="helloTarget" class="service.HelloServiceImpl"> <property name="helloDao" ref="helloDao" /> </bean> <bean id="helloAdvice" class="advice.HelloAdvice" /> <bean id="helloService" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <list> <value>service.HelloService</value> </list> </property> <property name="interceptorNames"> <list> <value>helloAdvice</value> </list> </property> <property name="target" ref="helloTarget"/> </bean> </beans>
输出结果
2009-07-11 17:22:35,625 DEBUG [HelloAdvice.java:18] :
Before Class:service.HelloServiceImpl's print
Hello World!
factory
Hello World!
factory
注:将spring.jar、junit.jar、commons-logging.jar、log4j.jar复制进WEB-INF/lib