我们知道 DI 框架,例如 Spring 和 Guice 有时会创建代理而不是 beans。要在 equals 和 hashcode 方法中比较这些代理,我们应该使用 instanceOf 运算符,因为它们的类不再与原始类相同。 此外(可能)这些代理可能会在一些未初始化的状态下创建,就像 Hibernate 代理一样(这只是我的猜测)。
我只知道 Spring 创建 bean 代理的一种情况:当您使用 @Configuration 注释它时。 还有其他类似情况吗? Spring 是否创建未初始化的代理,这些代理仅在访问这些字段后才初始化它们的字段?
我发现了一个类似的问题:When does Spring creates proxies in the bean's lifecycle? ,但请注意,它与 AOP 使用案例有关。我问的是不涉及 AOP 的简单 DI 用法。
Guice 同样的问题!
最佳答案
每次您使用诸如 @Transactional
或 @Cacheable
的注解时,Spring 都会使用代理。它的 AOP 与需要后期编译或编织的复杂 AOP 无关。
无论如何,请注意,如果您在您的某个服务中 Autowiring 了一个存储库,并且在服务中您创建了一个类在您设置存储库的位置,这将自动用作代理(如果有注释需要它)。
关于Guice,答案在@Oliver的评论里。
关于java - Spring 和 Guice : when DI frameworks create proxies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39947729/