@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算配置成功!