假设我们有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定义)和child上下文(可查看在第一个上下文中定义的所有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 {
    }
    

    10-01 03:26
    查看更多