如何避免在我的 java bean 中使用 Spring 注释并仅在配置 class 中使用它们?

How to avoid the use of Spring annotations in my java beans and use them only in the configuration class?

我是 Spring 的新手,这是我第一次 post 在这里,我开始使用 spring 注释,我能够使用 XML 配置,现在我可以仅使用注释来配置它并避免 XML.

但我目前的需要是避免在我的 java classes(bean)中使用注释,并且只在我的 AppConfig.java class 中使用它用于配置 Spring.

这是我当前的工作配置:

AppConfig.java

@Configuration
@ComponentScan(basePackageClasses= {BlocBuilder.class,... all my classes go here})
public class AppConfig {


  @Bean
  @Scope("prototype")
  public BlocBuilder blocBuilder(){ 
      return new BlocBuilder();
  }

}

这是我的 java classes.

BlocBuilder.java

public class BlocBuilder {

@Autowired
@Qualifier("acServices")
private SomeInterface someInterface;

public SomeInterface getSomeInterface() {
    return someInterface;
}
public void setSomeInterface(SomeInterface someInterface) {
    this.someInterface = someInterface;
}

我想要实现的是避免在我的 classes 中使用注释 例如在我的 BlocBuilder.java class 我不想有注释并移动它们到我的配置 class.

我该如何管理它?

非常感谢任何帮助。

我不推荐配置 class。它会把你所有的豆子结合在一起。

Spring 配置不需要是全有或全无的东西:注释或 XML。您可以根据自己的选择混合搭配。将注释放在你想要的 classes 中,其余的使用 XML。

构造函数注入正是您要找的。在 BlocBuilder 中创建一个带有 SomeInterface 类型参数的 1-arg 构造函数。然后在配置 class 中,将其作为参数传递:

@Configuration
@ComponentScan(basePackageClasses= {BlocBuilder.class,... all my classes go here})
public class AppConfig {

  @Bean
  public SomeInterface someInterface() {
      return new SomeInterfaceImpl();
  }

  @Bean
  @Scope("prototype")
  public BlocBuilder blocBuilder(){ 
      return new BlocBuilder(someInterface());
  }
}