Spring AOP 注释

@Aspect
public class CacheInterceptor {
private Logger logger = LoggerFactory.getLogger(CacheInterceptor.class); 
@Pointcut("execution(* com.vipshop.plcs.dao.impl.ProjectDaoImpl.*(..))")  
    private void cacheMethod(){}//定义一个切入点   
      
@Before("cacheMethod()")
    public void doAccessCheck(){  
        logger.info("============================================前置通知");
    }  
      
    @AfterReturning("cacheMethod()")  
    public void doAfter(){  
        logger.info("============================================最终通知");
    }  
      
    @After("cacheMethod()")  
    public void after(){  
        logger.info("=============================================后置通知");  
    }  
      
    @AfterThrowing("cacheMethod()")  
    public void doAfterThrow(){  
        logger.info("=============================================例外通知");  
    }  
    
    @Around("cacheMethod()")  
    public Object myAroundAdvice(ProceedingJoinPoint jionpoint)  
            throws Throwable {  
        // 获取被调用的方法名  
        String targetMethodName = jionpoint.getSignature().getName();  
        Object o = jionpoint.proceed();  
        String logInfoText = "==================================这是环绕通知:" + targetMethodName+" =========";  
        logger.info(logInfoText);  
        //Object o = jionpoint.proceed();//注意写到这儿的话,环绕通知和其它通知的顺序  
        return o;  
    } 
      
}



以上是一个拦截器,是在执行insert or update操作的时候来通知拦截器来进行缓存操作,当然还可以使用AOP来进行日志,审计等操作。

xml的配置如下:

<!-- 通知容器来织入缓存拦截 -->
       <aop:aspectj-autoproxy />
        <bean id="cacheInterceptor" class="com.vipshop.plcs.intercepter.CacheInterceptor"/>
   <bean id="projectDaoImpl" class="com.vipshop.plcs.dao.impl.ProjectDaoImpl"/>


这样配置之后spring容器就知道什么时候执行哪些操作

==========================================结果=================================================================

2014-01-09 17:22:57,430 [main] INFO - ============================================前置通知
3210 [main] DEBUG com.vipshop.plcs.dao.impl.ProjectDaoImpl  - GenericIbatisDao() ProjectEntity
3210 [main] DEBUG org.mybatis.spring.SqlSessionUtils  - Creating a new SqlSession
3210 [main] DEBUG org.mybatis.spring.SqlSessionUtils  - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@711b50a1] was not registered for synchronization because synchronization is not active
3211 [main] DEBUG org.springframework.jdbc.datasource.DataSourceUtils  - Fetching JDBC Connection from DataSource
3211 [main] DEBUG com.mchange.v2.resourcepool.BasicResourcePool  - trace com.mchange.v2.resourcepool.BasicResourcePool@390e7c9e [managed: 2, unused: 1, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@67de0c09)
3211 [main] DEBUG org.mybatis.spring.transaction.SpringManagedTransaction  - JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@30721965] will not be managed by Spring
3211 [main] DEBUG ProjectEntity.queryAll  - ooo Using Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@30721965]
3211 [main] DEBUG ProjectEntity.queryAll  - ==>  Preparing: SELECT PROJ.PROJECT_ID AS PROJECT_ID, PROJ.PROJECT_NAME AS PROJECT_NAME, PROJ.PROJECT_TYPE_ID AS PROJECT_TYPE_ID, PROJ.PROJECT_DESC AS PROJECT_DESC, PROJ.HEALTH_LEVEL AS HEALTH_LEVEL, PROJ.PROJECT_MANAGER_ID AS PROJECT_MANAGER_ID, PROJ.PROJECT_MANAGER_NAME AS PROJECT_MANAGER_NAME, PROJ.DEV_MANAGER_ID AS DEV_MANAGER_ID, PROJ.DEV_MANAGER_NAME AS DEV_MANAGER_NAME, PROJ.QA_MANAGER_ID AS QA_MANAGER_ID, PROJ.QA_MANAGER_NAME AS QA_MANAGER_NAME, PROJ.REDMINE_ID AS REDMINE_ID, PROJ.IMPORTANCE_TYPE AS IMPORTANCE_TYPE, PROJ.PRIORITY_LEVEL AS PRIORITY_LEVEL, PROJ.REQUIREMENT_SOURCES AS REQUIREMENT_SOURCES, PROJ.PROJECT_RECEIVE_DATE AS PROJECT_RECEIVE_DATE, PROJ.PLAN_FINISH_DATE AS PLAN_FINISH_DATE, PROJ.ACTUAL_FINISH_DATE AS ACTUAL_FINISH_DATE, PROJ.SUBMITTED_REVIEW_EMPLOYEE_ID AS SUBMITTED_REVIEW_EMPLOYEE_ID, PROJ.SUBMITTED_REVIEW_TIME AS SUBMITTED_REVIEW_TIME, PROJ.STAGE_ID AS STAGE_ID, PROJ.STAGE_NAME AS STAGE_NAME, PROJ.CREATE_EMPLOYEE_ID AS CREATE_EMPLOYEE_ID, PROJ.CREATE_EMPLOYEE_NAME AS CREATE_EMPLOYEE_NAME, PROJ.CREATE_TIME AS CREATE_TIME, PROJ.ACTIVE AS ACTIVE, PROJ.LAST_UPDATE_EMPLOYEE_ID AS LAST_UPDATE_EMPLOYEE_ID, PROJ.LAST_UPDATE_EMPLOYEE_NAME AS LAST_UPDATE_EMPLOYEE_NAME, PROJ.LAST_UPDATE_TIME AS LAST_UPDATE_TIME, PROJ.VERSION AS VERSION FROM T_PROJECT PROJ WHERE PROJ.ACTIVE !=0 
3212 [main] DEBUG ProjectEntity.queryAll  - ==> Parameters: 
3249 [main] DEBUG org.mybatis.spring.SqlSessionUtils  - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@711b50a1]
3249 [main] DEBUG org.springframework.jdbc.datasource.DataSourceUtils  - Returning JDBC Connection to DataSource
3249 [main] DEBUG com.mchange.v2.resourcepool.BasicResourcePool  - trace com.mchange.v2.resourcepool.BasicResourcePool@390e7c9e [managed: 2, unused: 1, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@67de0c09)
2014-01-09 17:22:57,469 [main] INFO - ==================================这是环绕通知:queryAll =========
2014-01-09 17:22:57,469 [main] INFO - =============================================后置通知
2014-01-09 17:22:57,469 [main] INFO - ============================================最终通知

省略了查询的结果.....

这样的话aop算配置成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值