在实现抽象类的类中导入的配置类中使用抽象配置类中的bean

时间:2018-01-18 07:57:46

标签: java spring configuration autowired

我有一个由 Impl

实现的抽象配置类 Abs

Abs 有一个bean ImportantBean

我们导入 Imprt 配置。 class to Impl ,我需要在 Imprt

中使用 ImportantBean

我该怎么做?

IntelliJ表示它无法自动装配

类似的东西:

@Configuration 
@Import(Imprt.class)
public class Impl extends Abs {}

@Configuration
public abstract class Abs{
  @Bean
  public ImportantBean importantBean(){
  return new ImportantBean();}
}

@Configuration
public class Imprt{
  @Autowired
  private ImportantBean importantBean;
}

4 个答案:

答案 0 :(得分:1)

您的Imprt配置类在自动装配时不知道从哪里获取ImportantBean。您还无法确保在构建应用程序上下文并且已在Spring容器中加载bean (我假设您使用的是Spring框架)时,ImportantBean应该在构建{{1}之前已经存在}}

要使配置类Imprt接收Imprt

您需要@Import ImportantBean类到Impl,代码应该如下图所示实现 -

Imprt

答案 1 :(得分:0)

@Configuration 
@Import(Imprt.class)
public class Impl extends Abs {}

@Configuration
public abstract class Abs{
  @Bean
  public ImportantBean importantBean(){
  return new ImportantBean();}
}


public class Imprt{
  @Autowired
  private ImportantBean importantBean;
}

尝试删除课程Imprt中的@Configuration。我不知道Imprt的作用,但如果不是配置,请执行此操作。

答案 2 :(得分:0)

我认为这是因为你创建了重要的Bean作为私有。

如果在Impl类中添加新的@Autowired importantBean,它将会工作,尽管IntelliJ会将其标记为错误。

我不确定,但我认为将私有变更为受保护也应该有效。

答案 3 :(得分:0)

一切正常github.com/vitalieb/springContexts 问题在于Intellij不了解哪个上下文配置用作main。 因此,唯一需要做的就是在Intellij中添加正确的上下文作为主要上下文。