当前位置: 首页 > 知识库问答 >
问题:

如何在基于spring Java的配置中正确使用@Inject注释?

陈飞
2023-03-14

我是一个新的Spring,并在某些方面被卡住了,如下所述-

我有一个类color,它有两个不同的实现名,分别是Red和Blue,我想使用@inject将这两个实现名都注入color列表中。

Below is my ApplicationConfiguration class 

package org.arpit.java2blog.config;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.inject.Inject;

import org.arpit.java2blog.model.Country;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import(CountryConfig.class)
public class ApplicationConfiguration {

    @Inject
    private List<Color> colorList;

    @Bean
    public List<Color> colorList() {
        System.out.println("Second");
        List<Color> aList = new ArrayList<Color>();
        aList.add(new Blue());
        return aList;
    }

}

但将异常获取为

自动连线依赖项的注入失败;嵌套html" target="_blank">异常为org.springframework.beans.factory.beanCreationException:无法自动连接字段:private java.util.list org.arpit.java2blog.config.applicationconfiguration.colorlist;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到依赖项[org.arpit.java2blog.config.color]类型的合格bean[org.arpit.java2blog.config.color]:至少需要一个合格的bean作为此依赖项的自动候选项。依赖项注释:{@javax.inject.inject()}

共有1个答案

冯新知
2023-03-14

使用@inject填充ColorList的正确方法如以下代码所示,其中包含内联注释:

@Configuration
@Import(CountryConfig.class)
public class ApplicationConfiguration {

    @Inject
    private List<Color> colorList;

    @Bean
    public Color color() {
      return new Blue();//injects Blue object to colorList
    }

    @Bean
    public Color color() {
      return new Red();//injects Red object to colorList
    }
}

此外,您还可以很好地使用@order在内部colorlist的特定索引处注入color对象,如这里的Spring文档所述。

如果我从red和blue类中删除@component注释,并且在删除component之后只提供一个bean类型,那么该解决方案可以很好地工作

当您用@component标记bean类(对于任何Spring原型注释都是这样)时,bean将符合注入条件,并自动加载到colorlist中。因此,当您提供@bean注释方法并再给出一个对象时,该对象也将添加到列表中,但通常情况下,您将使用@component@bean加载列表,但不能同时使用这两种方法。

 类似资料:
  • 问题内容: 不合理,无法通过注释而不是纯XML Bean来配置Spring Bean,现在我正面临后果。 我使用以下方式配置REST通道 现在,我只需要简单地将设置为仅将此具有非null值的字段输出到JSON。我尝试了以下方法: Bean被创建,但是转换器的另一个实例已创建并在通道中使用。所以我已经尝试过这种方法并在Stackoverflow问题中进行了描述,但是json序列化仍然使用其自己的配置

  • 最后,我尝试通过 但我以结束。所以现在我别无选择,所以我在这里征求任何想法。如何控制和配置框架使用的映射器?

  • 在Spring Hibernate XML配置中,我有 我知道SpringJava配置的等价物如下:LocalSessionFactoryBuilder(dataSource())。AddAnnotatedClass(Foo.class)。buildSessionFactory(); 我的问题是,如果我不使用LocalSessionFactoryBuilder类,而是使用HibernateJpaV

  • 我正在用Java Swing制作一个游戏,其中有一个大POJO用来存储游戏的运行时数据,比如精灵的位置、当前显示的效果等等。我希望能够将其作为JSON保存到一个文件中,然后在以后重新构建。我发现Gson应该就是这么做的,但到目前为止我还没能让它工作。我总是遇到这样一个问题:它无法使嵌套在存储类中的某些变量可访问。 以下是我目前使用Gson的方式: 以下是我当前尝试使用时收到的错误消息: 是我在开头

  • 问题内容: 在最近我从事的一些大型项目中,选择其中一种(XML或注释)似乎变得越来越重要。随着项目的发展,一致性对于可维护性非常重要。 我的问题是:与基于注释的配置相比,基于XML的配置有哪些优势?与基于XML的配置相比,基于注释的配置有哪些优势? 问题答案: 注释有其用途,但它们不是杀死XML配置的灵丹妙药。我建议将两者混合! 例如,如果使用Spring,则将XML用于应用程序的依赖注入部分是完

  • 我有一个基于泽西2的项目,Guice 3.0技术。由于泽西2框架使用HK2,我必须配置HK2-Guice桥。 JerseyGuiceServletContextListener: 球衣配置: 如果我使用注解,一切都很好。但是当我使用注解时,我的类属性不会注入 如何使用com。谷歌。注射注入注释?