使用mybatis.spring。*。MapperScan扫描bean的Spring AOP

时间:2018-08-03 04:42:14

标签: spring aop mybatis spring-aop spring-mybatis

我正在研究一个组件,以使用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拦截方法?

2 个答案:

答案 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>