框架學習之Spring入門

一.Spring框架的概述

Spring是一個開源框架,於2003 年興起的一個輕量級的Java開發框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。

Spring的核心是控制反轉(IoC)和麪向切面(AOP)。簡單來說,Spring是一個分層的JavaSE/EEfull-stack(一站式) 輕量級開源框架。

Ioc   --Inverse of Control,控制反轉,將對象的創建權反轉給Spring.

DI     -- Dependency Injection,依賴注入,在Spring框架負責創建Bean對象時,動態的將依賴對象注入到Bean組件中

使用IOC可以解決的程序耦合性高的問題

二.Spring的特點

* 方便解耦,簡化開發
            * Spring就是一個大工廠,可以將所有對象創建和依賴關係維護,交給Spring管理
 * AOP編程的支持
            * Spring提供面向切面編程,可以方便的實現對程序進行權限攔截、運行監控等功能
  * 聲明式事務的支持
            * 只需要通過配置就可以完成對事務的管理,而無需手動編程

  * 方便程序的測試
            * Spring對Junit4支持,可以通過註解方便的測試Spring程序

    * 方便集成各種優秀框架
            * Spring不排斥各種優秀的開源框架,其內部提供了對各種優秀框架(如:Struts2、Hibernate、MyBatis、Quartz等)的直接支持
    * 降低JavaEE API的使用難度
            * Spring 對JavaEE開發中非常難用的一些API(JDBC、JavaMail、遠程調用等),都提供了封裝,使這些API應用難度大大降低

三.BeanFactory和ApplicationContext的區別

            * BeanFactory                -- BeanFactory採取延遲加載,第一次getBean時纔會初始化Bean
            * ApplicationContext      -- 在加載applicationContext.xml時候就會創建具體的Bean對象的實例,還提供了一些其他的功能
                * 事件傳遞
                * Bean自動裝配
                * 各種不同應用層的Context實現

四.DI(依賴注入)

屬性+set方法

public class CustomerServiceImpl {
	
	// 提供成員屬性,提供set方法
	private CustomerDaoImpl customerDao;
	public void setCustomerDao(CustomerDaoImpl customerDao) {
		this.customerDao = customerDao;
	}
	
	public void save(){
		System.out.println("我是業務層service....");
		// 原來編寫方式
		// new CustomerDaoImpl().save();
		
		// Spring的方式
		customerDao.save();
	}

}

配置文件中 service中注入dao

    <bean id="customerDao" class="com.luo.CustomerDaoImpl"/>
   	
   	<bean id="customerService" class="com.luo.CustomerServiceImpl">
   		<property name="customerDao" ref="customerDao"/>
   	</bean>

五.Spring框架的屬性注入

1.構造方法的注入,兩步

    * 編寫Java的類,提供構造方法

public class Car {
	private String name;
	private double money;
    public Car(String name, double money) {
	   this.name = name;
	   this.money = money;
	}
	@Override
    public String toString() {
		return "Car [name=" + name + ", money=" + money + "]";
	}
}

* 編寫配置文件

<bean id="car" class="org.westos.demo4.Car">
	<constructor-arg name="name" value="大奔"/>
	<constructor-arg name="money" value="100"/>
	<!-- 用index 來寫屬性的編號也可以 從0開始數
	<constructor-arg index="0" value="寶馬"/>
 	<constructor-arg index="1" value="545000"/>
    -->
</bean>

2. 屬性的setter方法的注入方式
            * 編寫Java的類,提供屬性和對應的set方法即可
            * 編寫配置文件

3. 如果Java類的屬性是另一個Java的類,那麼需要怎麼來注入值呢?
            * <property name="name" rel="具體的Bean的ID或者name的值"/>
            * 例如:
                <bean id="person" class="org.westos.demo4.Person">
                    <property name="pname" value="美美"/>
                    <property name="car2" ref="car2"/>
                </bean>

六.屬性注入之.數組,集合(List,Set,Map),Properties等的注入

1. 如果是數組或者List集合,注入配置文件的方式是一樣的

    private String [] arrs;  
    public void setArrs(String[] arrs) {
	    this.arrs = arrs;
    }

//數組 或 List集合

<bean id="collectionBean" class="com.luo.CollectionBean">
	<property name="arrs">
		<list>
    		<value>美美</value>
			<value>小風</value>
		</list>
	</property>
</bean>

//如果List集合中放的是對象就用

<bean id="collectionBean" class="com.luo.CollectionBean">
	<property name="list">
    	<list>
    		<ref bean="car">
    	</list>
	</property>
</bean>

2. 如果是Set集合,注入的配置文件方式如下:
        <property name="sets">
            <set>
                <value>哈哈</value>
                <value>呵呵</value>
            </set>
        </property>

3. 如果是Map集合,注入的配置方式如下:
        <property name="map">
            <map>
                <entry key="張三" value="38"/>
                <entry key="李四" value="38"/>
                <entry key="王五" value="29"/>
            </map>
        </property>

4. 如果是properties屬性集合的方式,注入的配置如下:
        <property name="pro">
            <props>
                <prop key="uname">root</prop>
                <prop key="pass">123</prop>
            </props>
        </property>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章