Spring入門知識 ———— Spring_IOC屬性常用注入方式
阿新 • • 發佈:2018-12-18
一、引言
如何在IOC容器中配置Bean,這個是每個小夥伴得掌握的。在之前HelloWorld也有接觸過,那麼本章來介紹一下IOC常用的注入方式。一般來說常用的屬性注入、構造器注入的方式,本章會通過一個例項來講解。
Car : 汽車類,汽車包含多個屬性,品牌、起源地、價格。具體內容如下
People:人,包含姓名,和一輛車。具體內容如下
建立applicationContext-beans.xml檔案
/** * 汽車類 */ public class Car { /** * 汽車品牌 */ private String brand; /** * 汽車產地 */ private String origin; /** * 汽車價格 */ private int price; public Car() {} public Car(String brand, String origin, int price) { this.brand = brand; this.origin = origin; this.price = price; } public void setBrand(String brand) { this.brand = brand; } public void setOrigin(String origin) { this.origin = origin; } public void setPrice(int price) { this.price = price; } /** * 列印 * @return */ @Override public String toString() { return "Car{" + "brand='" + brand + '\'' + ", origin='" + origin + '\'' + ", price=" + price + '}'; } }
/** * 人 */ public class People { private String name; private Car cat; public People() {} public People(String name, Car cat) { this.name = name; this.cat = cat; } public void setName(String name) { this.name = name; } public void setCat(Car cat) { this.cat = cat; } @Override public String toString() { return "People{" + "name='" + name + '\'' + ", cat=" + cat + '}'; } }
二、構造器注入
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <!-- Car : 通過構造器進行屬性注入 --> <bean id="car" class="com.spring.two.Car"> <constructor-arg name="origin" value="未知"></constructor-arg> <constructor-arg name="brand" value="保時捷"></constructor-arg> <!--也可以把value當作子節點--> <constructor-arg name="price"> <value>1100000</value> </constructor-arg> </bean> <!-- People : 通過構造器進行屬性注入 --> <bean id="people" class="com.spring.two.People"> <constructor-arg name="name" value="Tom"></constructor-arg> <!-- 在這裡Car是一個物件,可以使用ref來引用上面的car --> <!--<constructor-arg name="car" ref="car"></constructor-arg>--> <constructor-arg name="car"> <!-- 也可以定義一個內部Bean,內部Bean可以不需要指定id--> <bean class="com.spring.two.Car"> <constructor-arg name="origin" value="未知"></constructor-arg> <constructor-arg name="brand" value="保時捷"></constructor-arg> <constructor-arg name="price" value="1100000"></constructor-arg> </bean> </constructor-arg> </bean> </beans>
三、屬性注入
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<!--
重點:如果是通過Setter方法注入的,property中的name屬性值,是和每一個Set方法後面的名字對應的,而不是和屬性名對應
但是我們Setter方法都是採用自動生成的,所以一般Setter方法都是和屬性名對應的
-->
<!-- Car : 通過Setter方法注入屬性 -->
<bean id="car" class="com.spring.two.Car">
<property name="brand" value="保時捷"></property>
<property name="origin" value="未知"></property>
<property name="price" value="1100000"></property>
</bean>
<!-- People : 通過Setter方法注入屬性 -->
<bean id="people" class="com.spring.two.People">
<property name="name" value="Tom"></property>
<!-- 引用物件-->
<!-- <property name="cat" ref="car"></property>-->
<!--同樣也可以建立內部bean-->
<property name="cat">
<bean class="com.spring.two.Car">
<property name="brand" value="保時捷"></property>
<property name="origin" value="未知"></property>
<property name="price" value="1100000"></property>
</bean>
</property>
</bean>
</beans>
四、最後執行結果
public class Main {
public static void main(String[] args) {
BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext-beans.xml");
Car car = (Car) beanFactory.getBean("car");
System.out.println(car.toString());
People people = (People) beanFactory.getBean("people");
System.out.println(people.toString());
}
}
十月 28, 2018 2:04:56 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
資訊: Refreshing org[email protected]246b179d: startup date [Sun Oct 28 14:04:56 CST 2018]; root of context hierarchy
十月 28, 2018 2:04:56 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
資訊: Loading XML bean definitions from class path resource [applicationContext-beans.xml]
Car{brand='保時捷', origin='未知', price=1100000}
People{name='Tom', cat=Car{brand='保時捷', origin='未知', price=1100000}}
Process finished with exit code 0