Spring 核心之IOC

Spring 核心之IOC

介紹

Spring已經不僅僅是一個框架了,更是一種設計思想和開發理念。 
Spring框架體系中有很多內容,但是所有的這些模塊和技術都是基於Spring核心建立的,因此掌握Spring核心是非常必要的。

Spring核心內容
1、Spring IOC容器,依賴注入
2、Spring AOP面向切面技術

假如沒有Spring IOC容器,我們之前的開發模式可能就是這樣的,爲了不讓對象氾濫,我們可能會使用到大量靜態工廠和單例模式來設計。

Spring的產品就可以簡化我們的開發了,可以將Spring IOC容器理解成一個強大的對象工廠。

Spring IOC

IOC(控制反轉)/DI的概念

本來是由應用程序創建和管理對象之間依賴關係,現在交給了第三方容器創建和管理,這就是控制反轉.
對Spring來說即交給了IOC容器,Spring的IOC容器主要使用DI的方式實現的.

通過控制反轉之後,應用程序使用對象時即不需要主動查找,對象的查找、定位、和創建全部都由容器管理和負責。

簡單來說Spring IOC容器就是管理對象創建以及管理對象關係的容器,IOC容器是個更爲複雜的對象工廠。

IOC實現方式

面嚮對象語言中,實現控制反轉的方式:

1、Using a factory pattern
2、Using a service locator pattern
3、Using a dependency injection, for example
    A constructor injection
    A parameter injection
    A setter injection
    An interface injection
4、Using a contextualized lookup
5、Using template method design pattern
6、Using strategy design pattern

備註:Spring中主要使用的就是依賴注入

使用 Spring 帶來的優點

1、大量減少了Factory和Singleton的數量,使代碼的層次更加清晰,主要原因是我們不再查找、定位、創建和管理對象的創建以及對象之間的依賴關係。
2、Spring IOC容器是一個輕量級的容器,侵入性很低,不需要依賴容器的API,也不需要實現Spring的任何接口。
3、一個合理的設計儘量避免侵入性(有時候不得已也要使用侵入式)
4、會使我們的框架結合工作的更好(Struts2、Hibernate4)
5、提供AOP聲明式服務能力,可以針對POJO對象提供聲明式服務能力,如聲明式事務。
6、對於資源,Hibernate Session或JDBC Connection 我們不再負責開啓和關閉,把它們交給Spring容器來管理
7、鼓勵我們面向接口編程,可配置可修改
8、減少代碼的耦合(解耦合),將耦合推遲到了配置文件中,發生變化時也容易修改

Spring IOC應用開發

Spring裝配Bean方式

1、自動化裝備bean(基於註解和自動掃描)
2、通過Java代碼裝配bean
3、通過XML裝配bean

混合配置

備註:首選註解開發結合xml配置

基於註解開發步驟

1、將需要被spring管理的對象使用@Component註解
@Component(value = "user")
public class User
{
    ...
}
備註:@Component可以不寫value屬性,其有默認命名規則,推薦寫上。

2、打開自動掃描組件配置
<!-- 自動掃描組件包配置 -->
<context:component-scan base-package="com.xuyi" />

3、MainApp測試
// 獲得Spring 的IOC容器(上下文)
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
            "classpath:config/applicationContext.xml");

User user = applicationContext.getBean("user", User.class);
user.show();

備註:基於註解開發的關鍵點在於打開自動掃描配置,這種方式也是開發首推。

基於Java代碼裝配開發步驟

@Configuration
public class PersonConfig
{
    @Bean
    public Person setPerson(){
        return new Person();
    }   
}

備註:通過@Bean註解和new 對象,優點類似靜態工廠方法

基於XML配置裝配開發步驟

1、將需要被spring管理的對象使用bean標籤配置在配置文件中
<!-- 配置javabean對象 -->
<bean id="book" class="com.xuyi.hellospring.xml.Book">
    <property name="id" value="3"/>
    <property name="content" value="a book about us history"/>
</bean>

2、MainApp

// 獲得Spring 的IOC容器(上下文)
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
            "classpath:config/applicationContext.xml");

Book book = applicationContext.getBean("book", Book.class);
book.show();

備註:xml配置方式有時候能夠滿足複雜的配置,在一定場景下比較合適,平常推薦註解方式。

總結

比起熟練使用Spring更重要的是理解和明白Spring的設計思想以及產生Spring的原因和使用其目的。

IOC和AOP是其核心基石,掌握它們非常的重要。

參考

1、http://docs.spring.io/spring/docs/4.2.7.RELEASE/spring-framework-reference/htmlsingle/#beans
2、https://en.wikipedia.org/wiki/Inversion_of_control
3、[Spring in Action](Spring in Action)

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