首页

通过aopalliance继承MethodInterceptor拦截器进行自定义服务用例代码示例

标签:aopalliance,拦截器,MethodInterceptor,aop,自定义,Interceptor,Aspect,面向切面编程,paramMethodInvocation     发布时间:2017-06-17   

一、前言

基于aopalliance提供AOP的拦截处理机制定义依赖包(aopalliance-1.0.jar下载)来自定义处理拦截器(org.aopalliance.intercept.MethodInterceptor),用于实现面向切面的编程比如事务日志、通用逻辑方法及复杂对象化过程的解耦等

二、代码示例

1.自定义MyMethodInterceptor拦截器

import org.aopalliance.intercept.MethodInterceptor;@b@import org.aopalliance.intercept.MethodInvocation;@b@import org.springframework.stereotype.Component;@b@@b@@Component@b@public class MyMethodInterceptor implements MethodInterceptor {@b@@b@	@Override@b@	public Object invoke(MethodInvocation invocation) throws Throwable {@b@			Object[] object = invocation.getArguments();@b@		 try{@b@		    System.out.println("信息:["+this.getClass().getName()+"] 拦截器准备执行...");@b@		   @b@		    Object returnObject = invocation.proceed();@b@		   @b@		    System.out.println("信息:["+this.getClass().getName()+"] 拦截器执行完成! ");@b@		   @b@		    return returnObject;@b@		   }catch(Throwable throwable){@b@		    throwable.printStackTrace();@b@	     }@b@		   @b@		   return object;@b@@b@	}@b@	@b@}

2. 用户服务层代码IUserService及实现类

public interface IUserService {@b@	@b@   void  login() throws Exception;@b@@b@}
import org.springframework.stereotype.Service;@b@@b@@Service@b@public class UserServiceImpl implements IUserService {@b@@b@	@Override@b@	public void login() throws Exception {@b@		System.out.println("用户登录成功!");@b@	}@b@	@b@}

3. spring配置文件

<?xml version="1.0" encoding="UTF-8"?>@b@<beans xmlns="http://www.springframework.org/schema/beans"@b@		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"@b@		xmlns:context="http://www.springframework.org/schema/context"@b@		xsi:schemaLocation="@b@			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd@b@			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">@b@		@b@   <!-- 自动扫描Action加入Spring上下文 Scope:prototype -->@b@  <context:component-scan base-package="com.xwood.test" scope-resolver="org.springframework.context.annotation.Jsr330ScopeMetadataResolver"/>@b@		@b@  <bean id="userService"  class="org.springframework.aop.framework.ProxyFactoryBean" >@b@	<property name="target">@b@	   <ref bean="userServiceImpl" />@b@	</property>@b@		   @b@	 <property name="interceptorNames">@b@	    <list>@b@		<value>myMethodInterceptor</value>@b@	    </list>@b@	 </property>@b@		   @b@ </bean> @b@		 @b@</beans>

4. 测试用例类SpringMethodInterceptorTest

import org.junit.Test;@b@import org.springframework.beans.factory.annotation.Autowired;@b@import org.springframework.test.context.ContextConfiguration;@b@import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;@b@@b@@ContextConfiguration(locations={"classpath*:spring-*.xml"})@b@public class SpringMethodInterceptorTest extends  AbstractJUnit4SpringContextTests {@b@	@b@	@Autowired@b@	private  IUserService userService;@b@	@b@	@Test@b@    public  void   test() throws Exception{@b@		userService.login();@b@    }@b@@b@}

控制台日志

信息:[com.xwood.test.interceptor.MyMethodInterceptor] 拦截器准备执行...@b@用户登录成功!@b@信息:[com.xwood.test.interceptor.MyMethodInterceptor] 拦截器执行完成!