Spring通过构造函数autowiring
时间:2020-02-23 14:35:36 来源:igfitidea点击:
通过构造函数autowiring类似于通过类型的自动控制,但它应用于构造函数参数。
如果多于一个bean属性匹配,那么它会抛出致命的异常。
我在这里使用"构造函数"来实现Autowire。
它几乎通过Setter方法与依赖注入相同,具有XML配置文件的一些更改。
1.Country.java:
这是简单的Pojo类,其中有一些属性,所以国家有资本类的名称和对象。
在package org.igi.onitorad.onit.copy下创建Country.java。
内容到Country.java之后。
package org.igi.theitroad;
public class Country {
String countryName;
Capital capitalObj;
public Country(String countryName, Capital capitalObj) {
super();
this.countryName = countryName;
this.capitalObj = capitalObj;
}
public String getCountryName() {
return countryName;
}
public void setCountryName(String countryName) {
this.countryName = countryName;
}
public Capital getCapitalObj() {
return capitalObj;
}
public void setCapitalObj(Capital capitalObj) {
this.capitalObj = capitalObj;
}
}
2.Capital.java.
这也是一个名为"bueinkname"的一个属性的简单pojo类。
在package org.igi.theitroad下创建capital.java .java.above country class包含此类的对象。
内容以capical.java之后内容
package org.igi.theitroad;
public class Capital {
String capitalName;
public String getCapitalName() {
return capitalName;
}
public void setCapitalName(String capitalName) {
this.capitalName = capitalName;
}
}
3.BeanautowiringByContructormain.java.
此类包含main function.Create beanautowiringByConstructorMain.java在package org.igi.theitroad .copy以下内容到beanautowiringbyconstructormain.java之后
package org.igi.javapostsforlearning;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BeanAutowiringByConstructorMain{
public static void main(String[] args) {
ApplicationContext appContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
Country countryObj = (Country) appContext.getBean("country");
String countryName=countryObj.getCountryName();
String capitalName=countryObj.getCapitalObj().getCapitalName();
System.out.println(capitalName+" is capital of "+countryName);
}
}
我们可以在此处注意到,我们在此处使用ClassPathxmlApplicationContext来获取bean。
有多种方法来获取beans.in Hello World示例我们已使用XMLBeanFactory来获取beans。
4.ApplicationContext.xml.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="country" class="org.igi.theitroad.Country" autowire="constructor">
<constructor-arg index="0" type="java.lang.String" value="Netherlands"
</bean>
<bean id="capitalObj" class="org.igi.theitroad.Capital">
<property name="capitalName" value="Amsterdam"
</bean>
</beans>
5.运行
当我们将运行上面的应用程序时,我们将按照输出作为输出。
Amsterdam is capital of Netherlands
如果类的两个属性有相同的数据类型,那么怎么办:
更改ApplicationContext.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="country" class="org.igi.theitroad.Country" autowire="constructor">
<constructor-arg index="0" type="java.lang.String" value="Netherlands"
</bean>
<bean id="capital1" class="org.igi.theitroad.Capital">
<property name="capitalName" value="Amsterdam1"
</bean>
<bean id="capital2" class="org.igi.theitroad.Capital">
<property name="capitalName" value="Amsterdam2"
</bean>
</beans>

