java - Spring自动默认定义bean(无需组件扫描)

标签 java spring dependency-injection guice

为了减少 Spring 配置中的样板数量(不使用组件扫描等),我想以“约定优于配置”的类似 Guice 的模式运行 Spring。

在 Guice 中,您不需要显式配置 bean。我可以创建如下所示的 bean 结构,Guice 将“做正确的事情”:

class Foo {
  @Inject
  public Foo(Bar bar) {
  }
}

class Bar {
  @Inject
  public Bar(Blah blah) {
  }
}

class Blah {
  public Blah() {}
}

在 Spring 中,我需要一个关联的 @Configuration 类,该类将充满样板文件,如下所示:

class Config {
  @Bean public void foo() {
    return new Foo();
  }

  // etc.
}

我怀疑这可能通过自定义 BeanFactory 实现,但如果可以通过 Spring 中的其他方式实现这一点,我希望避免走这条路。

@ComponentScan 将是一种替代方案,但我希望它能够与我控制范围之外的没有适当 spring @Component 注释的对象一起使用,并且我宁愿使用更多的手术刀方法,而不是组件扫描的霰弹枪。

最佳答案

我想你已经差不多做到了。您可以拥有<context:component-scan>以及一些您无法控制的类的进一步基于 xml 的 bean 定义。 Guice 的方法是绑定(bind) Provider对于这些类(class)。选择你的毒药。最近,我发现自己也试图从这些 DI 框架中榨取更多魔力,结果却意识到有些事情不能自动工作是有充分理由的。如果有其他情况的话就会很危险。

关于java - Spring自动默认定义bean(无需组件扫描),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13843428/

相关文章:

rust - 抽象引用容器(Rc、Arc、Box、...)

java - BufferOverflowException 的原因是什么?

Spring 集成单元测试出站 channel 适配器

java - 在 Hibernate 中的存储库和服务中编写查询

c# - 使用 Unity 设置依赖注入(inject)以将类的实例传递给构造函数

dependency-injection - 在 TopShelf 和 Quartz 范围问题中使用 Microsoft DependencyInjection

java - 安装了 Java 7,但终端仍然是 Java 6

java - 如何让我的数组多次替换某个值?

Java 使用 JAXBContext 从 XML 中提取值

java - 如何拦截java中的方法