【问题标题】:unable to get concrete class when it is proxified by SpringSpring 代理时无法获取具体类
【发布时间】:2020-08-09 15:04:36
【问题描述】:

我得到了类似的东西

 @Transactional
 public class ListController {

   @PersistenceContext
   EntityManager entityManager;


   @GetMapping("/save/avion")
   public ResponseEntity<String> save() {

        Avion avion = new Avion();
        entityManager.persist(avion);
   }

}

我只想知道 Spring 用于 EntityManager 的实现名称。 但我总是得到类似的东西..

我只是尝试了 4 种方法..

    System.out.println("==> " + entityManager.getClass());
    System.out.println("==> " + AopProxyUtils.ultimateTargetClass(entityManager));
    system.out.println("==> " + AopUtils.getTargetClass(entityManager).getName());
    System.out.println("==> " + entityManager.getClass().getCanonicalName());

但我系统地获得..

    ==> class com.sun.proxy.$Proxy110
    ==> class com.sun.proxy.$Proxy110
    ==> com.sun.proxy.$Proxy110
    ==> com.sun.proxy.$Proxy110

那么..我可以获得具体的课程吗?

【问题讨论】:

    标签: java proxy spring-aop


    【解决方案1】:

    如果要求获得工厂 bean 的名称,entityManager bean 上的 .toString() 将提供该信息。

    两者

    System.out.println(entityManager);
    

    String entityManagerName = entityManager.toString();
    System.out.println(entityManagerName);
    

    将在我的测试项目中打印

    目标工厂的共享 EntityManager 代理 [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@4f7d3ab3]

    请通过article(特别是B节注解处理下的第5点) ) 来详细了解框架代码。

    【讨论】:

    • 绝对正确但它返回给我EntityManagerFactory的具体实现,而不是EntityManager的实现,所以我看不到我的方法persist()的代码。
    • 请通过这个SO Q&A
    猜你喜欢
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多