我正在研究一个组件,以使用Spring AOP实现审核。我可以将其用于大多数服务方法。但是发现使用Mybatis映射器,AOP切入点不起作用。
基本上,Spring AOP仅适用于Spring管理的bean。但是这些映射器bean已使用mybatis.spring.*.MapperScan
进行了扫描,并且可以在其他Spring组件中自动接线。
为什么不能为Spring AOP扫描这些bean?有什么想法吗?
我可以使用AspectJ,但热衷于了解mybatis.spring.*.MapperScan
的工作原理。
例如-
我有这些配置,一个用于Mybatis映射器扫描,另一个配置用于特定于应用程序的配置。
@Configuration
@MapperScan("com.test.mapper")
public class ProviderConfiguration {
@Bean
public SqlSessionFactory sqlSessionFactory(final DataSource src) throws Exception {
...
}
}
@Configuration
@EnableAspectJAutoProxy
public class MainConfiguration {
}
我的Dao逻辑,我在其中调用映射器方法-
@Component
public class TestDao {
//injecting mybatis mapper here
@Inject
private SaveTableData saveTableData;
public TableData save(TableData tableData) {
saveTableData.updateTableData(tableData);
}
}
我已经按如下所示注册了切入点
@Component
@Aspect
public class TestAdvices {
@Pointcut("execution(* com.test.mapper.SaveTableData.updateTableData(*))")
public void commonSaveTableData(TableData tableData) {
}
@Pointcut("execution(* com.test.service.CreateTableData.createTableData(*))")
public void commonCreateTableData(TableData tableData) {
}
//advices
@After("commonSaveTableData(tableData)")
public void addHistoryWhenSaveTableData(TableData tableData) throws Throwable {
//do stuff
}
//advices
@After("commonCreateTableData(tableData)")
public void addHistoryWhenCreateTableData(TableData tableData) throws Throwable {
//do stuff
}
}
问题为commonCreateTableData
,该方法在使用中可以正常工作。但是Mybatis映射器方法上的commonSaveTableData
不会被调用。
问题是我是否可以在任何Spring Bean中自动装配这些Mappers,为什么不能使用这些切入点调用Spring AOP拦截方法?
答案 0 :(得分:0)
我认为您的切入点表达式不正确,请尝试
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G = nx.read_gml('karate.gml')
print (nx.info(G))
答案 1 :(得分:0)
无法像这样切入映射器的原因是,当mybatis扫描了映射器时,它的bean定义已更改为bean,其接口仍然是mapper接口,但其类已更改为MapperFactoryBean < / p>