spring是一個框架,一個我理解為對象的大熔爐,它生產着各種bean,還可以對生產的對象進行加工。
這里有些概念需要理解一下,就是IOC和DI以及AOP,接下來,我們進入主題。
spring簡介
上圖是官方直接copy下來的,主要是說明了各個組件的應用情況,在博客中的項目主要是應用了spring的核心容器部分。
簡介這個概念性的東西我們可以先看下百度百科的解釋,因為我覺得我還不是很夠格,而且我的表述能力一直是詬病
還有就是上面說到的幾個概念性的東西,我們一 一看來:
- IOC,我們把它翻譯為控制反轉,我當時也是很暈,這是什么鬼,一番解釋就是將我們新建對象的能力控制能力反轉給了spring容器
- DI ,依賴注入,這主要就是將容器中的對象通過一定的方法注入到我們需要的使用這個對象地方,一般是通過類中的setter方法將屬性的值進行注入,我把DI看成是IOC的具體實現方式之一
- AOP 面向切面編程,好像很高大上的樣子,貌似面向對象都不是很能說出個道道,怎么就面向切面了,其實面向切面我的理解是將各個類中零散的,但是又是必須的,不能直接抽取出來的代碼進行抽取,這些抽取的東西相當於一個切面,一個簡單的切面的例子就是我們web中的filter,如下圖
這里的各個servlet如果沒有filter就需要自己去過濾編碼問題了,但是,filter的出現解決了代碼的重復,這我理解為抽取,把一些相同的,零碎的重復代碼進行抽取,放入一個東西里面統一處理,這就是切面
最后我給出一些關於以上概念性的東西的鏈接,自己參考一下,以免我的個人局限耽誤了你
http://www.yiibai.com/spring/spring_overview.html
https://www.zhihu.com/question/25392984?sort=created
http://blog.csdn.net/mdcmy/article/details/8542277
http://www.cnblogs.com/lonelydreamer/p/6197024.html
https://martinfowler.com/articles/injection.html
使用spring構建一個對象
首先需要構建一個項目,這里我使用了maven構建,需要在pom.xml中添加如下依賴
<properties>
<spring.version>4.3.10.RELEASE</spring.version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
如果不使用maven就需要自己拷貝jar包了
這里有一個簡單的bean,代碼如下:
public class Dog {
private String name;
private String breed;
private String sex;
//get和set方法請自己加上去
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", breed='" + breed + '\'' +
", sex='" + sex + '\'' +
'}';
}
}
我們先看一下如果是沒有使用spring直接new一個bean是怎么樣的
/**
* 一般的類的創建--new
*/
@Test
public void test01(){
Dog dog = new Dog();//這里使用new關鍵字
dog.setSex("公");
dog.setName("旺旺");
dog.setBreed("土狗");
System.out.println(dog);
}
//打印結果:Dog{name='旺旺', breed='土狗', sex='公'}
但是使用spring獲取一個bean的話首先你需要配置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並且指定相應的類-->
<bean name="dog" class="cn.lger.domain.Dog"/>
</beans>
然后需要通過bean工廠加載xml配置文件,獲取信息,這里我們使用的是ClassPathXmlApplicationContext來獲取bean的信息它是BeanFactory的子類,能夠讀取classpath下的一個或者多個xml,包括jar包里面的
/**
* 通過ClassPathXmlApplicationContext獲取bean-->dog
*/
@Test
public void test02(){
//新建一個ClassPathXmlApplicationContext類型對象,並且加載xml文件
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
//通過bean的類型加載一個Dog類型對象
Dog dog = applicationContext.getBean(Dog.class);
//打印測試
System.out.println(dog);
}
//打印結果:Dog{name='null', breed='null', sex='null'}
上面兩個都弄出了dog對象,只是下面的對象的屬性值都為null,現在我們改一下xml文件
<!--聲明一個bean並且指定相應的類-->
<bean name="dog" class="cn.lger.domain.Dog">
<property name="name" value="小美"/>
<property name="breed" value="土狗"/>
<property name="sex" value="母"/>
</bean>
現在重新運行上面的test02方法打印的結果就是Dog{name='小美', breed='土狗', sex='母'}了,是不是很神奇。
但是,可能有一個問題就是new出來的不是更加簡單嗎,為什么還要通過這么復雜的配置等等等來獲取一個bean呢。剛開始我也在疑問,不過,這個還是在使用的過程中慢慢體驗吧。
到了這里就已經通過spring獲取了一個bean,已經是基本的入門了spring
關於這篇博客
這兩篇博客實在我學習了spring之后寫的,隔的時間有好些天了,因為近期有點時間,所以創作這篇博客,想要分享一下學習的東西。還有就是自己在一些已經看過的東西、概念中還是比較模糊的,一些都已經忘了,沒有經常練習的原因,所以,這也是算作筆記,這樣的話,忘了一些東西從新起步可能會比較快一點
小提示:有些人一直跟我說看官方文檔是最好的,因為這樣可以掌握核心科技:-) So,
https://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#overview
哦,聽說你不喜歡看英文的?
https://www.gitbook.com/book/waylau/spring-framework-4-reference/details