如何使用Spring Framework将同一个类的2个实例注入另外2个不同的类?

时间:2018-11-01 13:39:37

标签: java spring dependency-injection ejb inversion-of-control

我的问题如下:假设您有一个Person类,该类具有2个实例Adam和Jacobs。因此,您还有另外两个班级叫做“学校”和“大学”。我的任务是通过注入Jacobs在学校学习而Adam也是大学生的定义来定义。

如何使用Spring Framework做到这一点? 代码写答案是受欢迎的:))

1 个答案:

答案 0 :(得分:1)

我认为您要尝试的是在不同组件中注入相同类型的不同实例。您可以使用spring @Qualifiers做到这一点。我为您遇到的问题提供了解决方案。

具有Person类。

public class Person
{
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

以及每个人的配置。

@Configuration
public class DemoConfig {

    @Bean
    public Person adam() {
        return new Person("Adam");
    }

    @Bean
    public Person jacobs() {
        return new Person("Jacobs");
    }
}

学校班级。

@Component
public class School {

    private Person jacobs;

    public School(@Qualifier("jacobs") Person jacobs) {
        this.jacobs = jacobs;
    }

    public String personName() {
        return jacobs.getName();
    }
}

大学班类似于学校班,但将限定词更改为“ adam”。

这是对您的要求的考验。

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    @Autowired
    private School school;

    @Autowired
    private University university;

    @Test
    public void testPersonDependencies() {
        assertThat(school.personName()).isEqualTo("Jacobs");
        assertThat(university.personName()).isEqualTo("Adam");
    }
}