【问题标题】:How to inject Set<String> with Annotation-based configuration in Setter Injection?如何在 Setter 注入中使用基于注解的配置注入 Set<String>?
【发布时间】:2026-02-14 00:00:01
【问题描述】:

我正在开发一个简单的 Spring Core 项目。正如我们所知,要使用 Spring Core,我们需要向 IoC 容器提供一些配置元数据,并且配置元数据可以以 3 种形式提供。 Source is here

  1. 基于 XML 的配置
  2. 基于 Java 的配置
  3. 基于注解的配置

让我们考虑一个例子。我有一堂课Team

package com.altafjava.bean;
public class Team {
    private String teamName;
    private Set<String> players;

    public void setTeamName(String teamName) {
        this.teamName = teamName;
    }

    public void setPlayers(Set<String> players) {
        this.players = players;
    }
}

我们可以看到它有 2 个属性,我们想通过使用 Setter Injection 注入这些值。我们可以通过使用XML-based configuration 来做到这一点:

<bean id="team" class="com.altafjava.bean.Team">
        <property name="teamName" value="Avengers" />
        <property name="players">
            <set>
                <value>Iron Man</value>
                <value>Captain America</value>
                <value>Thor</value>
                <value>Hulk</value>
                <value>Thor</value>
            </set>
        </property>
    </bean>

我们也可以通过使用Java-based configuration 来做到这一点:

@Configuration
public class AppConfig {
    @Bean
    public Team team() {
        Team team = new Team();
        team.setTeamName("Football Players");
        Set<String> players = new HashSet<>();
        players.add("Ronaldo");
        players.add("Messi");
        players.add("Salah");
        players.add("Messi");
        team.setPlayers(players);
        return team;
    }
}

现在的问题是我们如何使用Annotation-based configuration 来做到这一点?

在基于注解的配置中,我们通常使用原型注解,如@Component@Service@Controller@Repository

【问题讨论】:

    标签: java spring dependency-injection setter-injection


    【解决方案1】:

    【讨论】:

    • 您给出的答案是使用Java-based configuration,我已经在我的问题中找到了它。我需要使用Annotation-based configuration 的解决方案。
    • 那么,是不可能的。
    【解决方案2】:

    不可能,因为在编译时使用了注解并且反射没有被编译...

    【讨论】: