java - 如何在 Spring 中缩小 bean 的可见性

标签 java spring

假设我们有 3 个类:

@Component
public class A {
}

@Component
public class B {
}

@Component
public class C {
    @Autowired
    public C(A a, B b) { }
}

默认情况下,每个 bean 都会看到任何其他已定义的 bean:

  • A 看到 B 和 C
  • B看到A和C
  • C 看到了 A 和 B。

我想要实现的是限制 bean A 的可见性:

  • A 看不到其他 bean
  • B看到A和C
  • C 看到 B 和 C

我认为我可以创建两个上下文:common,它只包含 A bean 定义,以及子上下文,它可以看到在第一个上下文中定义的所有 bean,并且还声明它自己的 bean(B 和 C)。 不幸的是,我没有找到使用 Java Config 执行此操作的任何方法。

你知道有什么方法可以实现这样的解决方案吗?

最佳答案

我不确定 C 是否可以看到 A(看起来可能是需要的,只是有一个错字)。如果没问题,那么我认为以下方法会起作用:

由于您使用的是 Spring 注释,因此 bean 可以是包范围的。

http://sahits.ch/blog/blog/2014/02/16/package-private-beans/

应该这样做:

package the.first
@Component
public class A {
}
package the.second
@Component
//package protected
class B {
}
package the.second
@Component
//package protected
class C {
}

关于java - 如何在 Spring 中缩小 bean 的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36627547/

相关文章:

java - SWT、多线程和异常

java - 需要替换包含 的 xslt 句子。 (点)带有空格

java - 如何告诉 IntelliJ Idea 12+ 在运行任何 junit 测试时使用测试 Maven 配置文件

java - 有什么方法可以将注释的值传递到 Spring Boot 中的配置吗?

spring - 是否可以在不使用 ApplicationContextAware 的情况下检索具有原型(prototype)范围的 Spring bean

java - 获取 GZIPped 文件属性(如 'gzip -l' ,基本上是压缩率)

java - 在与 GWT Module Base 不同的上下文中调用 GWT 服务?

java - 如何让 jvm 加载我的 java.lang.String 而不是 rt.jar 中的

java - Servlet Autowiring 失败

java - 如何在 Controller 中制作删除按钮