sping中如何配置拦截器
配置如下
aroundAdvice的代码如下:(本人觉得此方法较好)
beforeAdvice的代码如下:(二选一)
配置如下
<bean id="aroundAdvice" class="com.cs.advice.AroundAdvice" ></bean>
<bean id="beforeAdvice" class="com.cs.advice.BeforeAdvice" ></bean>
<!-- 相当于JDKProxy,不过他能代理任何类的对象 -->
<bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean" >
<!-- 以下是JDK动态代理要求的传入的接口 -->
<!-- 第一步:配置接口 -->
<property name="proxyInterfaces">
<list>
<value>com.cs.dao.UserDao</value>
</list>
</property>
<!-- 这是如何配置cglib 方式 cglib方式是spring已经提供的只需要配置即可 能代理任何类 与上面的jdk配置只能二选一
<property name="proxyTargetClass" value="true" />
-->
<!-- 第二步:配置目标对象 , 及腰拦截的对象是哪个 -->
<property name="target">
<bean class="com.cs.dao.UserDaoImpl"></bean>
</property>
<!-- 第三步:配置拦截器 , 及使用哪些拦截器 -->
<property name="interceptorNames">
<list >
<value>aroundAdvice</value>
</list>
</property>
</bean>
aroundAdvice的代码如下:(本人觉得此方法较好)
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class AroundAdvice implements MethodInterceptor {
public Object invoke(MethodInvocation arg0) throws Throwable {
System.out.println("开启事务");
Object obj = arg0.proceed() ; // 相当于调用真正的方法
System.out.println("关闭事务");
return obj;
}
}
beforeAdvice的代码如下:(二选一)
import org.springframework.aop.MethodBeforeAdvice;
public class BeforeAdvice implements MethodBeforeAdvice {
public void before(Method method, Object[] args, Object target)
throws Throwable {
System.out.println("日志记录:" + method.getName() + " is inteceptor");
//在方法调用之前做的事情
}
}
测试类:
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml") ;
UserDao uDao = (UserDao)ctx.getBean("proxy") ; //如果配置的是cglib方式 ,则能代理任何类
uDao.addUser(new User()) ;
}