1. 程式人生 > >Spring學習筆記01(IOC)

Spring學習筆記01(IOC)

IOC和DI

IOC(控制反轉 Inversion of control)很抽象的概念,是一種設計思想,在spring中可以先簡單的理解為將物件的建立,賦值等交給spring工廠進行.
DI(依賴注入 dependency injection)控制反轉有一種方式叫做 依賴注入,A如果依賴B,A此時並不需要建立B,也不用關心B如何建立的,spring會在適合的時候將B創建出來注入到A中。

簡單瞭解一下工廠模式

下面寫了一個小demo
在這裡插入圖片描述

a1.properties 是一個文字檔案,裡面通過鍵值的方式放入我們需要的資料
key值自己定義,value值是要建立的物件的類
本例子裡面放的就是:   userDao = com.
其中factory包下的BeanFactory就是要寫的一個工廠類,直接先看程式碼然後解釋

public class BeanFactory{
	//先建立Properties物件
	private static Properties pro = new Properties();
	//在靜態程式碼塊裡面讀取a1.properties裡面的內容
	static {
		//靜態程式碼塊中的程式碼要進行try catch處理
		try {
			//將properties檔案裡面的內容讀取進入一個流中
			InputStream in = BeanFactory.class.getResourceAsStream("/a1.properties");
			//用properties物件從輸入流中讀取
pro.load(in); } catch (Exception e){ e.printStackTrace(); } //建立物件的方法 public static Object getBean(String key){ //通過反射機制建立物件 Class clz = Class.forName(pro.getProperty(key)); return clz.newInstance(); } } } //建立一個測試類 public class TestBeanFactory{ public static void main(String[
] args) { //呼叫工廠類建立物件 UserDao dao=(UserDao)BeanFactory.getBean("userDao"); //呼叫dao中的方法 dao.insert(); } }

接下來就看一下 Spring怎麼建立物件的吧

1.新增jar包 為了省事,我將spring的初始學習的jar全部匯入了
在這裡插入圖片描述
2.需要一個xml配置檔案,本例名字是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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!--在這裡寫上要建立的物件
        1d:這個bean標籤的唯一標識,自己起的名字不要重複就好
        class:要建立物件的類全路徑
        -->
    <bean id="userService" class="com.service.impl.UserServiceImpl"></bean>
</beans>

3.測試一下

public class TestSpring{
	public static void main(String[] args) {
		//建立spring的工廠的物件
		ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
		//引數就是配置檔案裡面 對應bean的id值
		UserService us=(UserService)ac.getBean("userService");
	}
}

屬性注入

這個直接上程式碼了
Person類

	private int id;
    private String name;
    private List<String> list;
    private Properties pro;
	//set get 方法

配置檔案:

<bean id="person" class="com.entity.Person">
        <!--給基本型別賦值  int-->
        <property name="id" value="101"></property>
        <!--給String型別賦值-->
        <property name="name" value="張三"></property>
        <!--給list集合型別賦值-->
        <property name="list">
            <list>
                <value>哈哈</value>
                <value>呵呵</value>
                <value>嘿嘿</value>
            </list>
        </property>
        <!--給properties型別賦值-->
        <property name="pro">
            <props>
                <prop key="a1">哈哈</prop>
                <prop key="a2">呵呵</prop>
                <prop key="a3">嘿嘿</prop>
            </props>
        </property>
    </bean>


構造注入

User類裡面要加一個有參構造方法

private String username;
public User(String name){
	this.name=name;
}

配置檔案:

<bean id="user" class="com.entity.User">
		<!--name屬性是User類裡面的屬性名稱
		也可以是index 代表有參構造中方法的順序
		還有type等....
		-->
        <constructor-arg name="username" value="張三"></constructor-arg>
 </bean>

本次教程到此結束啦