是否可以为第三方包使用aspectj切点(JDBC模板)

时间:2017-07-26 15:52:47

标签: spring-mvc aspectj spring-jdbc jdbctemplate

我使用Spring JdbcTemplate进行连接。我正在尝试记录"执行的查询"直接从JDBC模板使用aspectJ。

是否可以通过以下方式直接对第三方软件包(JDBC模板)使用aspectj切入点:@pointcut("execution(* org.springframework.jdbc.core.JdbcOperations.*(..))")?当我尝试这个时,没有调用JDBC操作中的这个切入点。

我还尝试了以下内容:@Pointcut("execution(* org.springframework.jdbc.core.JdbcTemplate.*(..))")。但仍然没有发生任何事情。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您无法使用Spring AOP实现此目的,因为它不在您的应用程序的上下文中,而是由Spring容器管理。 Spring AOP仅限于它自己的应用程序上下文,但AspectJ可以使用它。

首先,您需要将AspectJ runtime library添加到项目中。 必需的依赖项:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.3.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.8.10</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.10</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>4.3.5.RELEASE</version>
    </dependency>

接下来,启用项目的AspectJ特性。我正在使用STS,所以在我的情况下我只是Enable AspectJ tooling,它会自动将AspectJ运行时添加到我的项目中。右键单击您的项目 - &gt;弹簧工具 - &gt;启用S​​pring Aspects Tooling

enter image description here

确保AspectJ运行时库位于类路径

enter image description here

接下来将AspectJ方面添加到您的项目中。

public aspect JdbcAspect {

     before(): execution(* org.springframework.jdbc.*.*.*(..)) {
            System.out.println("   ### Intercepted");
        }
}