Spring學(xué)習(xí)系列--1.初識(shí)Spring

  • [ ] 想寫(xiě)成一個(gè)系列,目錄待定

初識(shí)Spring

Spring 是什么和在java開(kāi)發(fā)中的地位就不詳細(xì)描述了。這里大部分也都是老生重談,重點(diǎn)寫(xiě)一些我get到的小細(xì)節(jié)。

直接使用Spring

對(duì)于大多數(shù)人來(lái)說(shuō)Spring,首先代表的是SSH中的S,幾乎脫離了SSH環(huán)境,在不搜索的情況下,不會(huì)使用Spring。所以我們先直接使用以下Spring,會(huì)有一些直觀的感受。

環(huán)境配置

Spring 插件

這里用STS的插件,或者直接用STS的IDE,重要的是它有一個(gè)Spring Bean Configuration File,可以選擇。這樣可以聲明那一堆麻煩的聲明,可以選,不怕手敲的錯(cuò)誤,不怕版本不正確。(我當(dāng)時(shí)最怕搞這些東西,每次都去找別的工程去copy,要不然就去spring的jar包里去找,挺麻煩的)
類(lèi)似 xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

Spring 最基礎(chǔ)依賴包

  • spring-core
  • spring-beans
  • spring-context
  • spring-expression
  • commons-logging

Spring HelloWorld

create Bean

一個(gè)標(biāo)準(zhǔn)的javabean 有g(shù)et 和 set 方法(這里放的東西會(huì)稍微多一些,為后續(xù)使用)

public class UserEntity {
    private String name;
    private String pass;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        System.out.println("setName is working ....");
        this.name = name;
    }
    public void setName3(String name) {
        System.out.println("setName3 is working ....");
        this.name = name;
    }
    public String getPass() {
        return pass;
    }
    public void setPass(String pass) {
        this.pass = pass;
    }
    public UserEntity() {
        System.out.println("UserEntity Construct is working.....");
    }

創(chuàng)建Bean配置文件

<bean id="userEntity" class="com.nina.spring.work.UserEntity" >
    <property name="name3" value="Spring"></property>
</bean>

客戶端使用

    //1.創(chuàng)建容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//2 獲得Bean
        UserEntity user = (UserEntity)ctx.getBean("userEntity");

這樣就可以使用了,name的值可以發(fā)現(xiàn)是依賴spring注入的。

需要體會(huì)的幾個(gè)點(diǎn)

  • 在代碼的第一步,創(chuàng)建容器的時(shí)候,對(duì)容器中的Bean就已經(jīng)完成的初始化和注入值。
  • 說(shuō)人話就是,
    • 對(duì)管理的Bean調(diào)用構(gòu)造方法
    • 對(duì)property屬性注入的值,調(diào)用set方法。這里沒(méi)有看源碼,不過(guò)是對(duì)屬性前面加了set(上例中調(diào)用的屬性name3,與Bean中setName3對(duì)應(yīng)。)

Spring 補(bǔ)充基礎(chǔ)

  • spring 是一個(gè)IOC(DI)和 AOP 容器

Spring 結(jié)構(gòu)圖

image

根據(jù)這個(gè)圖,所以在前面,我們導(dǎo)入spring的包的時(shí)候,確認(rèn)這4個(gè)包是必須的。

  • Core 和 Beans 兩個(gè)模塊 提供了框架的基本支持, 主要包含了 IOC (控制反轉(zhuǎn)) 和 DI (依賴注入) 特性, BeanFacotry 作為工廠模式的超級(jí)接口, 耦合低
  • Context 模塊 在 core 和 beans 兩個(gè)模塊基礎(chǔ)之上構(gòu)建, 繼承了beans模塊特性, 并且添加了國(guó)際化支持,事件傳播,資源加載, 開(kāi)發(fā)式的上下文構(gòu)建, 還支持 J2EE 特性,如EJB,JMX,還有基本的遠(yuǎn)程調(diào)用, 超級(jí)接口 ApplicationContext
  • Expression Language 表達(dá)式支持, 這個(gè)主要就是用來(lái)支持一些spring XML 配置文件表達(dá)式 和 注解中一些表達(dá)式解析,讓配置有動(dòng)態(tài)特性

IOC & DI

Inversion of Control

就是需要使用bean資源的時(shí)候,傳統(tǒng)方式去new,這里是由spring容器推送,這個(gè)過(guò)程與傳統(tǒng)反過(guò)來(lái)了,所以叫反轉(zhuǎn)控制。
IOC 類(lèi)似于簡(jiǎn)單工廠模式

Dependency Injection

資源以約定的方式接受來(lái)自容器的注入(例如setter)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,973評(píng)論 6 342
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,993評(píng)論 19 139
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,206評(píng)論 2 7
  • 什么是Spring Spring是一個(gè)開(kāi)源的Java EE開(kāi)發(fā)框架。Spring框架的核心功能可以應(yīng)用在任何Jav...
    jemmm閱讀 16,562評(píng)論 1 133
  • 我承認(rèn),此刻我看著窗外慢慢落去的太陽(yáng),感覺(jué)有點(diǎn)抑郁.到丹麥快一個(gè)禮拜了,還是沒(méi)有完全適應(yīng).來(lái)之前我答應(yīng)一些人會(huì)記錄...
    jupitergranit閱讀 157評(píng)論 0 0