4、IOC創建物件方式
通過無參構造方法來創建
1、User.java
public class User {
?
private String name;
?
public User() {
System.out.println("user無參構造方法");
}
?
public void setName(String name) {
this.name = name;
}
?
public void show(){
System.out.println("name="+ name );
}
?
}
2、beans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
?
<bean id="user" >
<property name="name" value="https://www.cnblogs.com/ctf99525/p/kuangshen"/>
</bean>
?
</beans>
3、測驗類
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//在執行getBean的時候, user已經創建好了 , 通過無參構造
User user = (User) context.getBean("user");
//呼叫物件的方法 .
user.show();
}
結果可以發現,在呼叫show方法之前,User物件已經通過無參構造初始化了!
通過有參構造方法來創建
1、UserT . java
public class UserT {
?
private String name;
?
public UserT(String name) {
this.name = name;
}
?
public void setName(String name) {
this.name = name;
}
?
public void show(){
System.out.println("name="+ name );
}
?
}
2、beans.xml 有三種方式撰寫
<!-- 第一種根據index引數下標設定 -->
<bean id="userT" >
<!-- index指構造方法 , 下標從0開始 -->
<constructor-arg index="0" value="https://www.cnblogs.com/ctf99525/p/kuangshen2"/>
</bean>
<!-- 第二種根據引數名字設定 -->
<bean id="userT" >
<!-- name指引數名 -->
<constructor-arg name="name" value="https://www.cnblogs.com/ctf99525/p/kuangshen2"/>
</bean>
<!-- 第三種根據引數型別設定 -->
<bean id="userT" >
<constructor-arg type="java.lang.String" value="https://www.cnblogs.com/ctf99525/p/kuangshen2"/>
</bean>
3、測驗
@Test
public void testT(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserT user = (UserT) context.getBean("userT");
user.show();
}
結論:在組態檔加載的時候,其中管理的物件都已經初始化了!
Spring配置
別名
alias 設定別名 , 為bean設定別名 , 可以設定多個別名
<!--設定別名:在獲取Bean的時候可以使用別名獲取-->
<alias name="userT" alias="userNew"/>
Bean的配置
<!--bean就是java物件,由Spring創建和管理-->
?
<!--
id 是bean的識別符號,要唯一,如果沒有配置id,name就是默認識別符號
如果配置id,又配置了name,那么name是別名
name可以設定多個別名,可以用逗號,分號,空格隔開
如果不配置id和name,可以根據applicationContext.getBean(.class)獲取物件;
?
class是bean的全限定名=包名+類名
-->
<bean id="hello" name="hello2 h2,h3;h4" >
<property name="name" value="https://www.cnblogs.com/ctf99525/p/Spring"/>
</bean>
import
團隊的合作通過import來實作 .
<import resource="{path}/beans.xml"/>
5、依賴注入(Dependency Injection,DI)
概念
-
依賴 : 指Bean物件的創建依賴于容器 . Bean物件的依萊澩 .
-
注入 : 指Bean物件所依賴的資源 , 由容器來設定和裝配 .
Set 注入 (重點)
要求被注入的屬性 , 必須有set方法 , set方法的方法名由set + 屬性首字母大寫 , 如果屬性是boolean型別 , 沒有set方法 , 是 is .
創建環境
Student類
package com.chen.pojo;
?
import java.util.*;
?
public class Student {
private String name;
private Address address;
private String[] books;
private List<String> hobbys;
private Map<String,String> card;
private Set<String> games;
private String wife;
private Properties info;
?
public String getName() {
return name;
}
?
public void setName(String name) {
this.name = name;
}
?
public Address getAddress() {
return address;
}
?
public void setAddress(Address address) {
this.address = address;
}
?
public String[] getBooks() {
return books;
}
?
public void setBooks(String[] books) {
this.books = books;
}
?
public List<String> getHobbys() {
return hobbys;
}
?
public void setHobbys(List<String> hobbys) {
this.hobbys = hobbys;
}
?
public Map<String, String> getCard() {
return card;
}
?
public void setCard(Map<String, String> card) {
this.card = card;
}
?
public Set<String> getGames() {
return games;
}
?
public void setGames(Set<String> games) {
this.games = games;
}
?
public String getWife() {
return wife;
}
?
public void setWife(String wife) {
this.wife = wife;
}
?
