当前位置: 首页 > 知识库问答 >
问题:

在jdbcTemplate上创建切入点时出现Proxy错误

关飞翼
2023-03-14

我尝试做一个切入点,记录SQL查询

  @Before("execution(* org.springframework.jdbc.core.JdbcTemplate.*(String, ..))")
public void logSQLQueries() {
        System.out.println("@@");
    }

我正在尝试实现此处的代码;http://www.gotoquiz.com/web-coding/programming/java-programming/log-sql-statements-with-parameter-values-filled-in-spring-jdbc/

但我得到

java.lang.IllegalArgumentException: Can not set org.springframework.jdbc.core.JdbcTemplate field com.xyz.abc.dao.ABCDaoImpl.jdbcTemplate to com.sun.proxy.$Proxy53

我已经在我的 *-servlet 中创建了 jdbc模板 bean.xml并在我所有的 DAO 中自动连接了它。工作完全正常,但添加切入点给出了例外。任何想法 ??

共有1个答案

汪安宁
2023-03-14

默认情况下,Spring使用JDK动态代理来应用AOP。(有关代理的更多信息,请参阅此处)。

发生的情况是,创建了一个动态类(com.sun.proxy.$Proxy53),它实现了目标类实现的所有接口。对于一个JdbcTemplate,即Jdbc操作初始化Bean。所以动态类是一个Jdbc操作,但不是一个JdbcTemplate,因此注入失败。

你有几个解决方案

  1. 使用接口JdbcAction而不是类JdbcTemplate
  2. 进行编程
  3. 使用基于类的代理
  4. 使用加载时编织

现在,选项 1 和 2 是最容易实现的,而选项 3 是最强大和最复杂的入门(请参阅下面的链接)。

换一个你的班级

@Autowired
private JdbcTemplate jdbcTemplate;

@Autowired
private JdbcOperations jdbcTemplate; 

如果您正在扩展JdbcDaoSupport,您可能会陷入困境,然后它将无法工作。

选项 2,假设您有

对于选项3,我参考了参考指南,因为它涉及(可能)一个java代理,并且可能会更复杂一些。

链接

    < li >了解AOP代理 < li >使用AspectJ进行加载时编织

 类似资料:
  • 我试图编写一个round_up函数,将浮点数转换为整数,但是我获取小数位数的方法似乎有错误(浮点数%1的剩余部分)。如果浮点数是4.4,我希望将其转换为4;如果是4.5,我希望将其转换为5。错误消息:错误:无效的操作数到二进制%(有'浮动'和'int')

  • 我正在尝试将PostgreSQL配置为在我的rails应用程序中使用全文搜索,如本铁路广播中所述。 我使用的是一个全新的Ubuntu 12.04服务器,运行的是PostgreSQL 9.1.5,安装时使用的是apt get,使用的是ppa:pitti/PostgreSQL,使用的是precise。 尝试运行迁移时,以及在psql控制台中与对等postgres用户尝试相同的命令时,出现以下错误: 错

  • 我得到: 创建在类路径资源[org/springframework/data/web/config/ProjectingArgumentResolverRegistrar.class]中定义了名为“ProjectingargumentResolveanPostProcessor”的bean时出错:bean初始化失败;嵌套的异常是java。lang.IllegalArgumentException:

  • 我试图在Ubuntu16.04LTS中安装docker datage,Apache侦听端口80和443。 当我尝试午餐应用程序时,我得到以下错误: 启动现有容器+/usr/bin/docker启动应用程序错误响应:驱动程序在endpoint应用程序上编程外部连接失败(dade361e77fbf29f4d9667febe57a06f168f916148e10cc1365093d8f97026bb):

  • 我正在用MySQL数据库构建一个django应用程序。当我第一次运行“Python Manage.py Migrate”时,一些表创建得很好,然后出现一些错误。引出的错误是: 完整的回溯是:

  • 我正在尝试使用EclipseLink创建一个表。正在使用的java类是:- EL警告]:2017-04-07 14:04:53.768--ServerSession(1650327539)--异常[EclipseLink-4002](Eclipse持久性服务-2.6.3.v20160428-59C81C5):org.Eclipse.Persistence.exceptions.DatabaseEx