gpt4 book ai didi

java - AutoWiring与构造函数,IOC如何在多个构造函数中选择构造函数

转载 作者:行者123 更新时间:2023-11-30 02:51:09 25 4
gpt4 key购买 nike

我有三颗 bean :电影、导演、英雄

电影 bean :

public class Movie {

private Director director;
private String name;

private Hero hero;

public Movie(Director director, Hero hero) {
System.out.println("m1");
this.director = director;
this.name = name;
this.hero = hero;
}

public Movie(Director director, String name) {
System.out.println("m2");
this.director = director;
this.name = name;
}

public Movie(Director director) {
System.out.println("m3");
this.director = director;
}

public Movie() {
System.out.println("m4");
}
}

导演和英雄 bean :

public class Director {

}

public class Hero {

}

spring-core.xml

<bean id="movieBean" class="Movie" autowire="constructor" />

<bean id="directorBean" class="Director"></bean>
<bean id="heroBean" class="Hero"></bean>

请注意在上面的 XML 中我已经声明了所有三个 bean

主类

ApplicationContext context = new ClassPathXmlApplicationContext("spring-core.xml");

Movie movie = (Movie) context.getBean("movieBean");
System.out.println(movie);

输出“m1”,即调用的构造函数是Movie(Director director, Hero hero)

我的问题是:为什么只调用这个构造函数,以及如果我们使用构造函数进行 Autowiring ,那么 IOC 容器在注入(inject)依赖项时如何在多个构造函数中进行选择

最佳答案

只能调用一个构造函数来实例化 bean。这类似于创建一个新对象时仅调用一个构造函数(如果您想要真正精确,是的,您可以链接调用此构造函数)

在这种情况下,将使用具有大多数参数的构造函数,这些参数可以由上下文中可用的其他 bean 满足。

关于java - AutoWiring与构造函数,IOC如何在多个构造函数中选择构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38616314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com