sping中怎么配置拦截器
sping中如何配置拦截器
sping中如何配置拦截器
配置如下
aroundAdvice的代码如下:(本人觉得此方法较好)
beforeAdvice的代码如下:(二选一)
sping中如何配置拦截器
配置如下
<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()) ; }