Spring學習筆記--Spring配置文件和依賴注入

Spring配置文件java

1.alias:設置別名,爲bean設置別名,而且能夠設置多個別名;spring

<!-- 設置別名 -->
       <alias name="user" alias="user1"/>

2.bean的配置;數組

    <!--id是bean的標識符,要惟一,若是沒有配置id,name默認爲標識符 
         若是配置了id,又配置了name,那麼name就是別名
        name能夠設置多個別名而且別名能夠是空格 逗號 分號
        class是bean的全限定名=包名+類名
        若是不配置id和name,則能夠根據applicationContext.getBean(Class)獲取對象
    -->
    <bean id="h1" name="hello h2,h3;h4" class="cn.sxt.bean.Hello">
        <property name="name" value="張三"></property>
    </bean>

3.團隊協做開發,經過import來實現;session

在咱們的beans.xml中就能夠引入和使用entity.xml文件中的bean配置(代碼中config/spring爲咱們新建的包config.spring)app

<import resource="config/spring/entity.xml"/>

而entity.xml中進行bean的詳細配置:框架

    <bean id="h1" name="hello h2,h3;h4" class="cn.sxt.bean.Hello">
        <property name="name" value="張三"></property>
    </bean>

Bean的做用域函數

scope指bean的做用域,在配置bean時,有scope屬性來配置bean的做用學習

注意:在整合struts和spring時,須要將action設爲scope="prototype";this

 <bean id="addr" class="cn.sxt.vo.Address" scope="singleton">
    <!-- scope:bean的做用域 (默認是singleton):
    singleton:單例(用計數器記錄),整個容器中只有一個對象的實例;
    prototype原型:每次獲取bean都產生一個新的對象;
    request:每次請求時,建立一個新的對象;
    session:在回話的範圍內是一個對象(servlet的session);
    global session: 只在portlet下有用,表示是application
    application:在應用範圍內,只有一個對象;
    -->

Bean的自動裝配(spring4)spa

是用來簡化spring的配置文件,在配置bean時,能夠配置bean的autowire屬性,用於指定裝配類型

<bean id="userDao" class="cn.sxt.dao.impl.UserDaoMySqlImpl"></bean>
    <!-- autowire:自動裝配,用於簡化spring的配置
         no     不使用自動裝配
         byname 根據名稱(set方法名)來查找相應的bean,若是有則裝配上去
           使用形式:xml頭文件最後面加上default-autowire="byName"
         byType 根據類型進行裝配,不一樣去管bean的id(bean的id能夠寫任意)
                 可是同一種類型的bean只能有一個(儘可能慎用byType)
         constructor 當使用構造器實例化bean時,適用byType的方式裝配構造方法
     -->
    <bean id="service" class="cn.sxt.service.impl.UserServiceImpl" autowire="constructor"></bean>

能夠配置全局的自動裝配類型,在xml文件的頭部:default-autowire="byname"

【注意】推薦不使用自動裝配,而使用annotation

依賴注入 DI
1.依賴注入--dependency injection;

 依賴:指bean對象建立依賴於容器,Bean對象的依賴資源

 注入:指bean對象依賴的資源由容器來設置和裝配

2.spring注入--構造器注入

   見IOC建立對象,也就是上一篇筆記中IOC構造方法建立對象的內容(有參和無參)

3.spring注入--setter注入(重點)

   要求被注入的屬性必須有set方法。set方法的方法名由set+屬性(屬性首字母大寫),若是屬性是boolean類型,沒有get方法(是is);

 3.1 常量注入

 Student.java:

package cn.sxt.vo;

public class Student {
	private String name;
	public void setName(String name) {
		this.name = name;
	}
	public void show(){
		System.out.println("name="+name);
	}
}

  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="student" class="cn.sxt.vo.Student">
        <property name="name" value="張三丰"></property>
    </bean>
</beans>

    Test.java:

package cn.sxt.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.sxt.vo.Student;

public class Test {

	public static void main(String[] args) {
		ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
		Student stu=(Student)ac.getBean("student");
		stu.show();
	}

}

 3.2 Bean注入

新建一個類Address:

package cn.sxt.vo;

public class Address {
	private String address;

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
	
}

Student類中引用Address類的對象(Student的實例變量是另一個類Address的對象):

private Address addr;
	public void setAddr(Address addr) {
		this.addr = addr;
	}

beans.xml:

 <bean id="addr" class="cn.sxt.vo.Address">
        <property name="address" value="北京優衣庫"/>
    </bean>
    <bean id="student" class="cn.sxt.vo.Student">
        <property name="name" value="張三丰"></property>
        <property name="addr" ref="addr"></property>
    </bean>

 3.3 數組注入
Student類繼續添加一個實例變量books以及books的set方法:

private String[] books;
     public void setBooks(String[] books) {
	this.books = books;
      }

beans.xml中作如下修改:

    <bean id="student" class="cn.sxt.vo.Student">
        <property name="name" value="張三丰"></property>
        <property name="addr" ref="addr"></property>
        <property name="books">
            <array>
                <value>傲慢與偏見</value>
                <value>仲夏夜之夢</value>
                <value>霧都孤兒</value>
            </array>
        </property>
    </bean>

 3.4 List注入

Student類繼續添加實例變量及其set方法:

private List<String> hobbies;
       public void setHobbies(List<String> hobbies) {
                this.hobbies = hobbies;
        }

beans.xml作如下配置:

<bean id="student" class="cn.sxt.vo.Student">
        <property name="name" value="張三丰"></property>
        <property name="addr" ref="addr"></property>
        <property name="books">
            <array>
                <value>傲慢與偏見</value>
                <value>仲夏夜之夢</value>
                <value>霧都孤兒</value>
            </array>
        </property>
        <property name="hobbies">
            <list>
                <value>羽毛球</value>
                <value>乒乓球</value>
                <value>玻璃球</value>
                <value>排球</value>
            </list>
        </property>
    </bean>

    3.5 Map注入

Student繼續添加實例變量Map<String,String> cards;

private Map<String, String> cards;
	public void setCards(Map<String, String> cards) {
		this.cards = cards;
	}

beans.xml作如下配置:

    <bean id="student" class="cn.sxt.vo.Student">
        <property name="name" value="張三丰"></property>
        <property name="addr" ref="addr"></property>
        <property name="books">
            <array>
                <value>傲慢與偏見</value>
                <value>仲夏夜之夢</value>
                <value>霧都孤兒</value>
            </array>
        </property>
        <property name="hobbies">
            <list>
                <value>羽毛球</value>
                <value>乒乓球</value>
                <value>玻璃球</value>
                <value>排球</value>
            </list>
        </property>
        <property name="cards">
            <map>
                <entry key="中國銀行" value="1545615345415"></entry>
                <entry>
                    <key><value>農業銀行</value></key>
                    <value>54654861231543</value>
                </entry>
            </map>
        </property>
        
    </bean>

   3.6 Set注入

Student類添加實例變量Set<String>games及其set方法;

private Set<String> games;
public void setGames(Set<String> games) {
	this.games = games;
}

beans.xml作如下配置(都是些重複的步驟):

    <bean id="student" class="cn.sxt.vo.Student">
        <property name="name" value="張三丰"></property>
        <property name="addr" ref="addr"></property>
        <property name="books">
            <array>
                <value>傲慢與偏見</value>
                <value>仲夏夜之夢</value>
                <value>霧都孤兒</value>
            </array>
        </property>
        <property name="hobbies">
            <list>
                <value>羽毛球</value>
                <value>乒乓球</value>
                <value>玻璃球</value>
                <value>排球</value>
            </list>
        </property>
        <property name="cards">
            <map>
                <entry key="中國銀行" value="1545615345415"></entry>
                <entry>
                    <key><value>農業銀行</value></key>
                    <value>54654861231543</value>
                </entry>
            </map>
        </property>
        <property name="games">
            <set>
                <value>LOL</value>
                <value>dota</value>
                <value>cs</value>
                <value>dnf</value>
                <value>cf</value>
                
            </set>
        </property>
        
    </bean>

  3.7 Null注入 
Student類添加實例變量String wife及其set方法;

private String wife;
public void setWife(String wife) {
	this.wife = wife;
}

beans.xml作如下修改:

<bean id="student" class="cn.sxt.vo.Student">
        <property name="name" value="張三丰"></property>
        <property name="addr" ref="addr"></property>
        <property name="books">
            <array>
                <value>傲慢與偏見</value>
                <value>仲夏夜之夢</value>
                <value>霧都孤兒</value>
            </array>
        </property>
        <property name="hobbies">
            <list>
                <value>羽毛球</value>
                <value>乒乓球</value>
                <value>玻璃球</value>
                <value>排球</value>
            </list>
        </property>
        <property name="cards">
            <map>
                <entry key="中國銀行" value="1545615345415"></entry>
                <entry>
                    <key><value>農業銀行</value></key>
                    <value>54654861231543</value>
                </entry>
            </map>
        </property>
        <property name="games">
            <set>
                <value>LOL</value>
                <value>dota</value>
                <value>cs</value>
                <value>dnf</value>
                <value>cf</value>
                
            </set>
        </property>
        <property name="wife"><null/></property>
    </bean>

   3.8 Properties 注入

Student繼續添加實例變量properties info;

private Properties info;
public void setInfo(Properties info) {
	this.info = info;
}

beans.xml作如下修改:

    <bean id="student" class="cn.sxt.vo.Student">
        <property name="name" value="張三丰"></property>
        <property name="addr" ref="addr"></property>
        <property name="books">
            <array>
                <value>傲慢與偏見</value>
                <value>仲夏夜之夢</value>
                <value>霧都孤兒</value>
            </array>
        </property>
        <property name="hobbies">
            <list>
                <value>羽毛球</value>
                <value>乒乓球</value>
                <value>玻璃球</value>
                <value>排球</value>
            </list>
        </property>
        <property name="cards">
            <map>
                <entry key="中國銀行" value="1545615345415"></entry>
                <entry>
                    <key><value>農業銀行</value></key>
                    <value>54654861231543</value>
                </entry>
            </map>
        </property>
        <property name="games">
            <set>
                <value>LOL</value>
                <value>dota</value>
                <value>cs</value>
                <value>dnf</value>
                <value>cf</value>
                
            </set>
        </property>
        <property name="wife"><null/></property>
        <property name="info">
        <props>
            <prop key="學號">2015534001</prop>
            <prop key="sex"></prop>
            <prop key="name">張三</prop>
        </props>
        </property>
    </bean>

 3.9 p命名空間注入

beans.xml頭文件添加如下內容:

咱們新建了一個User類:包含name和age屬性

beans.xml配置形式以下所示:

 <bean id="user" class="cn.sxt.vo.User" p:name="風清揚" p:age="230"></bean>

   3.10 c注命名空間入(構造函數注入)
beans.xml頭文件添加如下內容:

c命名空間注入要求有對應參數的構造方法:

public User(String name, int age) {
	super();
	this.name = name;
	this.age = age;
}

 beans.xml作如下配置:

    <bean id="u1" class="cn.sxt.vo.User" c:name="coco" c:age="16"></bean>

總結咱們以前學習的內容:

spring--橋樑

spring--輕量級,易學,ioc,aop,事務,整合框架等

spring--ioc:控制反轉(權限的反轉)

spring--Di(和ioc一個概念,只不過是站在不一樣的角度)

相關文章
相關標籤/搜索