博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring AOP 通过order来指定顺序
阅读量:6825 次
发布时间:2019-06-26

本文共 1040 字,大约阅读时间需要 3 分钟。

详见:

 

Spring中的事务是通过aop来实现的,当我们自己写aop拦截的时候,会遇到跟spring的事务aop执行的先后顺序问题,比如说动态切换数据源的问题,如果事务在前,数据源切换在后,会导致数据源切换失效,所以就用到了Order(排序)这个关键字.

        我们可以通过在@AspectJ的方法中实现org.springframework.core.Ordered 这个接口来定义order的顺序,order 的值越小,说明越先被执行。比如代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Component
@Aspect
public 
class 
AspectJ4DataBase 
implements 
Ordered {
    
//拦截所有的service操作
    
@Pointcut
(
"execution( * com.hc.shop.*.service.*.*(..))"
)
    
public 
void 
readMethod() {
    
}
// 匹配所有的读取操作
 
    
@Before
(
"readMethod()"
)
    
public 
void 
onlyReadPre() {
        
DataSourceContextHolder.setDataSourceType(DataSourceType.MYSQL);
        
System.out.println(
"数据库切换MYSQL"
);
    
}
 
    
@After
(
"readMethod()"
)
    
public 
void 
onlyReadPast() {
        
DataSourceContextHolder.setDataSourceType(DataSourceType.ORACLE);
        
System.out.println(
"数据库切换回ORACLE"
);
    
}
 
    
@Override
    
public 
int 
getOrder() {
// TODO Auto-generated method stub
        
return 
1
;
    
}
}

    在事务配置的地方也配置order 字段,代码如下:    

<!-- 注解方式配置事物 -->

1
<
tx:annotation-driven 
transaction-manager
=
"transactionManager" 
order
=
"2"
/>

 

这样就实现了我们自己写的aop在事务介入之前就执行了!

 

转载地址:http://rgezl.baihongyu.com/

你可能感兴趣的文章
解决“此电脑上没有安装True Speech声音解码器”的方法
查看>>
Win08R2变脸Win7第一招配置Owner信息
查看>>
远程桌面连接 详细图解
查看>>
Linux下查看文件和文件夹大小
查看>>
redis总结
查看>>
CsGL着色的三角形
查看>>
后端码农谈前端(CSS篇)第七课:定位与浮动
查看>>
springboot(十八):使用Spring Boot集成FastDFS
查看>>
何勉:第一性原理和精益敏捷的规模化实施
查看>>
HDFS 文件格式——SequenceFile RCFile
查看>>
处理 Oracle SQL in 超过1000 的解决方案
查看>>
精致的JS提示
查看>>
Visual Studio.Net 2005中用SqlDataSource处理数据库特殊数据类型
查看>>
MySQL---数据库从入门走向大神系列(十四)-ComboPooledDataSource(C3P0连接池配置)
查看>>
11.3、Libgdx的音频之播放PCM音频
查看>>
你真的会玩SQL吗?之逻辑查询处理阶段
查看>>
Redis集群明细文档(转)
查看>>
开源Math.NET基础数学类库使用(14)C#生成安全的随机数
查看>>
Linux之shell编程基础
查看>>
Http协议详解
查看>>