读书人

spring aop的运用

发布时间: 2012-11-26 11:48:50 作者: rapoo

spring aop的使用
1.基于@AspectJ
(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" name="code">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" 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" 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>我们在日常的使用中可以根据自己的需要选择具体使用那种方式,但是在一个项目中不建议使用过多的技术种类去同一种需求。 

读书人网 >互联网

热点推荐