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

Java 在实现抽象配置的类中导入的配置类中使用抽象配置类中的bean,java,spring,configuration,autowired,Java,Spring,Configuration,Autowired,我有一个抽象的配置类,由Impl实现 Abs有一个bean重要bean 我们导入一个改进的配置。将类设置为Impl,我需要在Imprt中使用重要项 我该怎么做 IntelliJ说它不能自动连接 比如: @Configuration @Import(Imprt.class) public class Impl extends Abs {} @Configuration public abstract class Abs{ @Bean public ImportantBean impor

我有一个抽象的配置类,由Impl实现

Abs有一个bean重要bean

我们导入一个改进的配置。将类设置为Impl,我需要在Imprt中使用重要项

我该怎么做

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;
}

尝试删除类
Imprt
中的@Configuration。我不知道Imprt做什么,但如果它不是一个配置,那么就这样做。

我认为这是因为您将重要Bean创建为私有

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


我不确定,但我认为将“私人”改为“受保护”也应该有效

您的
Imprt
配置类在自动连接时不知道从何处获取
重要bean
。您还无法确保在构建应用程序上下文并在Spring容器中加载bean时(我假设您使用的是Spring框架),
ImportantBean
应该在构建
Imprt

对于配置类
Imprt
接收
重要bean

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

@Configuration
// @Import(Imprt.class) --> removed this
public class Impl extends Abs {}

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

@Configuration
@Import(Impl.class) // ---> added new import here
public class Imprt{
  @Autowired
  private ImportantBean importantBean;
}
一切正常 问题在于Intellij不理解使用哪个上下文配置作为主配置。 因此,唯一需要做的就是在Intellij中添加正确的上下文作为主上下文


是否有代码可供查看?抱歉,我无法发布准确的代码。我会写一些样本,你能不能把它添加到问题中?这应该行得通。请创建一个实例来证明它失败了。一个抽象配置类对我来说没有多大意义,你不能有多个实现,因为你只能声明bean一次。请解释你为什么需要这个?上下文是由Impl初始化的,如果我使用你的解决方案,在app@Vitalie为什么不使用
Imprt.class
初始化上下文?你所说的导入信息是什么意思?您的
Imprt.class
具有可以初始化导入到您的应用程序的所有其他配置的所有配置。这是否意味着克隆您的代码库的每个人都必须显式进行此设置?代码在没有此设置的情况下也可以工作-但如果添加此设置,IntelliJ将不会显示错误
@Configuration
// @Import(Imprt.class) --> removed this
public class Impl extends Abs {}

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

@Configuration
@Import(Impl.class) // ---> added new import here
public class Imprt{
  @Autowired
  private ImportantBean importantBean;
}