天天看點

JavaWeb_(Spring架構)Spring中IoC與DI概念入門

  

JavaWeb_(Spring架構)Spring中IoC與DI概念入門
JavaWeb_(Spring架構)Spring中IoC與DI概念入門
JavaWeb_(Spring架構)Spring中IoC與DI概念入門

Spring是于2003 年興起的一個輕量級的Java 開源架構,它由Rod Johnson建立。傳統J2EE應用的開發效率低,Spring作為開源的中間件,提供J2EE應用的各層的解決方案,Spring貫穿了表現層、業務層及持久層,而不是僅僅專注于某一層的方案。可以說Spring是企業應用開發的“一站式(full-stack)”選擇。然而,Spring并不想取代那些已有的架構,而是與它們無縫地整合。

    簡單來說,Spring是一個輕量級控制反轉(IoC)和面向切面(AOP)的容器架構。      

Spring是什麼?

JavaWeb_(Spring架構)Spring中IoC與DI概念入門
JavaWeb_(Spring架構)Spring中IoC與DI概念入門
1、友善解耦,簡化開發
    通過Spring提供的IoC容器,我們可以将對象之間的依賴關系交由Spring進行控制,避免寫死所造成的過度程式耦合。有了Spring,使用者不必再為單執行個體模式類、屬性檔案解析等這些很底層的需求編寫代碼,可以更專注于上層的應用。

2、AOP程式設計的支援
    通過Spring提供的AOP功能,友善進行面向切面的程式設計,許多不容易用傳統OOP實作的功能可以通過AOP輕松應付。

3、聲明式事務的支援
    在Spring中,我們可以從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活地進行事務的管理,提高開發效率和品質。

4、友善程式的測試
    可以用非容器依賴的程式設計方式進行幾乎所有的測試工作,在Spring裡,測試不再是昂貴的操作,而是随手可做的事情。例如:Spring對Junit4支援,可以通過注解友善的測試Spring程式。

5、友善內建各種優秀架構
    Spring不排斥各種優秀的開源架構,相反,Spring可以降低各種架構的使用難度,Spring提供了對各種優秀架構(如Struts、Hibernate、MyBatis 、Hessian、Quartz)等的直接支援。

6、降低Java EE API的使用難度
    Spring對很多難用的Java EE API(如JDBC,JavaMail,遠端調用等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大為降低。      

為什麼要使用Spring?

  建立工程,導入jar包  

JavaWeb_(Spring架構)Spring中IoC與DI概念入門

  核心包:bean、context、core、expression;

  日志包:apache.commons.logging

  引入限制:bean限制和引入主配置檔案頭;

JavaWeb_(Spring架構)Spring中IoC與DI概念入門
JavaWeb_(Spring架構)Spring中IoC與DI概念入門
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns="http://www.springframework.org/schema/beans" 
            xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">

</beans>              

applicationContent.xml

  測試:将自定義對象由自己建立交由Spring管理

JavaWeb_(Spring架構)Spring中IoC與DI概念入門
JavaWeb_(Spring架構)Spring中IoC與DI概念入門
JavaWeb_(Spring架構)Spring中IoC與DI概念入門
package com.Gary.bean;

public class User {

    private Integer u_id;
    private String u_username;
    private String u_password;
    
    
    public Integer getU_id() {
        return u_id;
    }
    public void setU_id(Integer u_id) {
        this.u_id = u_id;
    }
    public String getU_username() {
        return u_username;
    }
    public void setU_username(String u_username) {
        this.u_username = u_username;
    }
    public String getU_password() {
        return u_password;
    }
    public void setU_password(String u_password) {
        this.u_password = u_password;
    }
    
    
    
}      

User.java

JavaWeb_(Spring架構)Spring中IoC與DI概念入門
JavaWeb_(Spring架構)Spring中IoC與DI概念入門
package com.Gary.test;

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

import com.Gary.bean.User;

public class HelloSpring {

    @Test
    public void Test1() {
        User u = new User();
        
        System.out.println("Test1()"+u);
    }
    
    //Spring是一個容器,它将幫助我們管理對象
    @Test
    public void Test2() {
        
        //根據spring配置檔案擷取容器對象
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        //User u = ac.getBean(User.class);
        //通過getBean擷取配置好的user對象,程式員向Spring容器要對象
        User u = (User) ac.getBean("user");
        
        System.out.println("Test2()"+u);
        
    }
    
    
}      

HelloSpring.java

JavaWeb_(Spring架構)Spring中IoC與DI概念入門
JavaWeb_(Spring架構)Spring中IoC與DI概念入門
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns="http://www.springframework.org/schema/beans" 
            xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">

    <bean name="user" class="com.Gary.bean.User">
        
    </bean>

</beans>              

applicationContext.xml

Spring-IoC | DI概念介紹:(要實作IOC依賴DI的支援)

  IoC(Inversion of Control):反轉控制:将我們自己建立對象的工作交給Spring容器幫我們完成; 

  DI(Dependency Injection):依賴注入:将值通過配置的方式為變量初始化/指派(注入);

  IOC的反轉:建立對象這份工作由我們自己執行反轉給spring幫我們執行;

  IOC的控制:就是由spring幫我們負責建立銷毀對象,掌控對象的生命周期等,我們在需要使用對象的時候跟Spring申請即可;

  IOC是一種程式設計思想,也是一種新的設計模式,它需要DI(依賴注入)技術的支援;

    c)注入方式:set方法注入、構造注入、字段注入(不推薦);

    d)注入類型: 

      i.值類型(value) – 八大基本資料類型;

      ii.引用類型(ref) – String、自定義對象;

  spring是一個容器,它将幫我們管理對象

  傳統方式給u_id指派

@Test
    public void Test1() {
        User u = new User();
        //傳統方式給u_id指派
        u.setU_id(1);
        
        System.out.println("Test1()"+u);
    }      

  Spring給u_id指派

  @Test
    public void Test2() {
        
        //根據spring配置檔案擷取容器對象
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        //User u = ac.getBean(User.class);
        //通過getBean擷取配置好的user對象,程式員向Spring容器要對象
        User u = (User) ac.getBean("user");
        
        System.out.println("Test2()"+u);
        
    }      
<bean name="user" class="com.Gary.bean.User">
        <!-- 為u_id注入了一個id為2的值 -->
        <property name="u_id" value="2"></property>
    </bean>      
JavaWeb_(Spring架構)Spring中IoC與DI概念入門
JavaWeb_(Spring架構)Spring中IoC與DI概念入門
JavaWeb_(Spring架構)Spring中IoC與DI概念入門
package com.Gary.test;

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

import com.Gary.bean.User;

public class HelloSpring {

    @Test
    public void Test1() {
        User u = new User();
        //傳統方式給u_id指派
        u.setU_id(1);
        
        System.out.println("Test1()"+u);
    }
    
    //Spring是一個容器,它将幫助我們管理對象
    @Test
    public void Test2() {
        
        //根據spring配置檔案擷取容器對象
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        //User u = ac.getBean(User.class);
        //通過getBean擷取配置好的user對象,程式員向Spring容器要對象
        User u = (User) ac.getBean("user");
        
        System.out.println("Test2()"+u);
        
    }
    
    
}      
JavaWeb_(Spring架構)Spring中IoC與DI概念入門
JavaWeb_(Spring架構)Spring中IoC與DI概念入門
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns="http://www.springframework.org/schema/beans" 
            xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">

    <bean name="user" class="com.Gary.bean.User">
        <!-- 為u_id注入了一個id為2的值 -->
        <property name="u_id" value="2"></property>
    </bean>

</beans>              

  使用Spring改造Servlet項目對象關系依賴圖

JavaWeb_(Spring架構)Spring中IoC與DI概念入門

(如需轉載學習,請标明出處)