(1)导入相应的包:aspectjweaver-1.6.10.jar
和使用Pointcut和Advice接口描述切点和增强不同,@AspectJ采用注解的方式来描述切点和增强
首先定义一个javabean
@Aspect //定义切面
public class LogginInterceptor {
private static Logger log = Logger.getLogger(LogginInterceptor.class);
@Before(value="execution(* com.suning.bi.mybatis.service..*(..))")// 定义增强和切入点
public void printAction(JoinPoint joinPoint){// 定义增强处理逻辑
log.info("getTarget:"+joinPoint.getTarget()+";"+"getAgrs:"+joinPoint.getArgs()+";"+"getSignture:"+joinPoint.getSignature()+";"+"方法执行");
}
}
(2)在spring配置文件中完成切面织入
<!-- 使用aspectJ方式 --> <bean id="loggingInterceptor" class="com.suning.bi.springMVC.interceptor.LogginInterceptor"></bean> <aop:aspectj-autoproxy/>
2.使用aop:advisor的方式(1)定义一个javabean
public class ExecuteOver implements AfterReturningAdvice{ private static Logger log = Logger.getLogger(ExecuteOver.class); /* (non-Javadoc) * @see org.springframework.aop.AfterReturningAdvice#afterReturning(java.lang.Object, java.lang.reflect.Method, java.lang.Object[], java.lang.Object) */ @Override public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable { // TODO Auto-generated method stub log.info(arg1.getName()+"执行完毕"); } }
(2)在spring配置文件中配置
<!-- 使用 advisor的方式 --> <bean id="executeOver" class="com.suning.bi.springMVC.interceptor.ExecuteOver"></bean> <aop:config proxy-target-class="false"> <aop:pointcut id="afterPointcut" expression="execution(* com.suning.bi.mybatis.service..*(..))"/> <aop:advisor advice-ref="executeOver" pointcut-ref="afterPointcut" /> </aop:config>
3.使用<aop:aspect>方式(1)配置javabean
public class AroundMethod { private static Logger log = Logger.getLogger(AroundMethod.class); public void around(ProceedingJoinPoint joinPoint) throws Throwable{ log.info(joinPoint.getSignature().getName()+"经过环绕增强开始执行"); joinPoint.proceed(); log.info(joinPoint.getSignature().getName()+"经过环绕增强执行结束"); } }
(2)在spring配置文件中配置aspect
<!-- 使用<aop:aspect>方式 --> <bean id="aroundMethod" class="com.suning.bi.springMVC.interceptor.AroundMethod"></bean> <aop:config proxy-target-class="false"> <aop:aspect ref="aroundMethod"> <aop:pointcut id="aroundPointcut" expression="execution(* com.suning.bi.springMVC..*(..))"/> <aop:around pointcut-ref="aroundPointcut" method="around"/> </aop:aspect> </aop:config>/code] [b]4.使用接口的方式,我没有使用过,自己可以去看对应的API。[/b] [b]5.可以使用Interceptor实现代理[/b] <bean id="autoproxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <!-- 可以是Service或DAO层(最好是针对业务层*Service) --> <property name="beanNames"> <list> <!-- 必要的时候可以注入具体的service,如UserService --> <value>*Service</value> </list> </property> <property name="interceptorNames"> <list> <!-- 在这里放入自己编写的Interceptor --> <value>transactionInterceptor</value> </list> </property> </bean> 我们在日常的使用中可以根据自己的需要选择具体使用那种方式,但是在一个项目中不建议使用过多的技术种类去同一种需求。