`

sping中如何配置拦截器

阅读更多
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()) ;
	}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics