如何避免在我的JavaBean中使用Spring注释,而只在配置类中使用它们?

如何避免在我的JavaBean中使用Spring注释,而只在配置类中使用它们?,java,spring,spring-mvc,configuration,annotations,Java,Spring,Spring Mvc,Configuration,Annotations,我是Spring新手,这是我在这里的第一篇文章,我开始使用Spring注释,我可以使用XML配置来配置我的项目,现在我可以只使用注释来配置它,而不使用XML 但我当前的需要是避免在java类(bean)中使用注释,而只在我用来配置Spring的AppConfig.java类中使用注释 这是我当前的工作配置: AppConfig.java @Configuration @ComponentScan(basePackageClasses= {BlocBuilder.class,... all my

我是Spring新手,这是我在这里的第一篇文章,我开始使用Spring注释,我可以使用XML配置来配置我的项目,现在我可以只使用注释来配置它,而不使用XML

但我当前的需要是避免在java类(bean)中使用注释,而只在我用来配置Spring的
AppConfig.java
类中使用注释

这是我当前的工作配置:

AppConfig.java

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


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

}
public class BlocBuilder {

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

public SomeInterface getSomeInterface() {
    return someInterface;
}
public void setSomeInterface(SomeInterface someInterface) {
    this.someInterface = someInterface;
}
这是我的一个java类

BlocBuilder.java

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


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

}
public class BlocBuilder {

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

public SomeInterface getSomeInterface() {
    return someInterface;
}
public void setSomeInterface(SomeInterface someInterface) {
    this.someInterface = someInterface;
}
我想要实现的是避免在我的类中使用注释,例如在我的
BlocBuilder.java
类中,我不希望有注释并将它们移动到我的config类中

我怎么办


非常感谢您的帮助。

我不建议使用配置类。它会把你所有的豆子结合在一起


Spring配置不需要是全有或全无的东西:注释或XML。你可以随意混搭。将注释放在所需的类中,其余部分使用XML。

构造函数注入是您需要的。在
BlocBuilder
中创建一个1-arg构造函数,它接受
SomeInterface
类型参数。然后在config类中,将其作为参数传递:

@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());
  }
}

我的目的是避免Xml配置,只使用注释,这在我们的项目中是一种强加。我必须找到一种方法,我使用一个顶级xml文件来定义属性占位符(因为我需要环境运行时覆盖),并将组件扫描到我的包中,在包中保留所有Java配置类。一点xml,但通过构造函数注入(从大型xml配置和@Autowire的使用中迁移出来)委托Java类来创建bean。SpringBean工厂对此负责。我不鼓励您将所有类与公共配置bean耦合。为什么不鼓励这样做?配置类和XML文件之间的区别在哪里?两者都将bean耦合在一起,这就是DI容器的要点。我是说SpringBean工厂已经做了您需要它做的事情。你不必再写一篇。这基本上也是我最喜欢的方法,但只是为了完整。通过这种配置,还可以由setter注入依赖项。关于原始配置,不需要创建单个参数构造函数,BlocBuilder类可能保持不变(在删除注释=)这正是我所需要的,我测试了你的建议,效果很好,非常感谢。这太神奇了,这种方法简单而完美,构造函数注入在1.0之前就已经是Spring的一部分了。这并不令人惊讶。