Long time no update, and first Time to use MarkDown Type
What is Spring ?
Spring , 開源的輕量級(jí)應(yīng)用開發(fā)框架
1. 創(chuàng)建對象
2. 管理對象
- Spring 容器,Spring中任何的Java類和JavaBean都被當(dāng)成Bean處理 ,Spring 容器就是對Bean進(jìn)行管理的烹卒,Spring容器通過IOC和AOP可以簡化Bean對象的創(chuàng)建(不需要new)掸冤,也可以降低Bean對象之間的耦合度惨险;
- Spring 容器:BeanFactory, ApplicationContext
Why Spring讹语?
- Spring 本質(zhì)就是管理對象,創(chuàng)建對象以及維護(hù)對象之間的關(guān)系
How Spring勇吊?
如何創(chuàng)建對象:Spring 容器實(shí)例化
ApplicationContext 繼承自BeanFactory接口
//加載文件系統(tǒng)中的配置文件
String conf = "D:\applicationContext.xml";
ApplicationContext ac = new FileSystemXmlApplicationContext(conf);
//加載工程classpath下的配置文件
String conf = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
代碼片段
Bean實(shí)例化的3種方式
構(gòu)造器
<bean id="calendar1" class="java.util.GregorianCalendar"></bean>
id(name) 表示Bean的名稱曼追, class 表示Bean的類型,Spring容器會(huì)自動(dòng)調(diào)用無參構(gòu)造函數(shù)創(chuàng)建對象
Calendar cal = (Calendar)ac.getBean("calendar1");
Calendar cal2 = ac.getBean("calendar1",Casendar.class);
靜態(tài)工廠方法
<bean id="calendar2" class="java.util.Calendar" factory-method="getInstance"></bean>
factctory-method指定工廠中創(chuàng)建Bean對象的方法汉规,必須用static修飾該方法
Calendar cal3 = ac.getBean("calendar1",Calendar.class);
getInstance()
實(shí)例化工廠方法
<bean id="cal1" class="java.util.GregorianCalendar"></bean>
<bean id="cal2" factory-bean="cal1" factory-method="getTime"></bean>
//Spring創(chuàng)建對象礼殊,調(diào)用getTime()方法創(chuàng)建Date類型對象
Date d = ac.getBean("cal2",Date.class);
Bean 的作用域
作用域 | 含義 |
---|---|
singleton | 單例模式,一個(gè)Bean對應(yīng)一個(gè)對象,默認(rèn) |
prototype | 一個(gè)Bean對應(yīng)多個(gè)對象 |
request | http請求一個(gè)Bean對應(yīng)一個(gè)對象 |
session | http session中一個(gè)Bean對應(yīng)一個(gè)對象 |
global session | 全局http session中一個(gè)Bean對應(yīng)一個(gè)對象 |
Bean 的生命周期回調(diào)
初始化回調(diào)方法
<bean id = "obj1" class ="com.org.ky.dao.TestJDBC" init-method="init"></bean>
銷毀回調(diào)方法
//destory-method 僅適用于singleton模式的bean
<bean id = "obj1" class ="com.org.ky.dao.TestJDBC" destory-method="destory"></bean>
設(shè)置容器中所有的Bean 初始化回調(diào)方法
<beans>
<bean id ="objn" class ="com.org.ky.dao.TestJDBC"></bean>
</beans>
Bean 延遲實(shí)例化
//lazy-init 可以在一個(gè)singleton bean zai ApplicationContext 初始化前不被提前實(shí)例化
<bean id = "obj1" lazy-init ="true" class ="com.org.ky.dao.TestJDBC"></bean>
Bean 依賴關(guān)系
<bean id ="objA" class ="com.org.ky.dao.TestJDBC" depends-on="objB"></bean>
<bean id ="objB" class ="com.org.ky.dao.TestJDBC"></bean>
What is IOC
說白了就是創(chuàng)建對象不需要new针史, 而是通過第3方框架創(chuàng)建晶伦,注入(setter注入,構(gòu)造器注入)
setter 注入
setter注入代碼片段
注入?yún)?shù)配置
2. 構(gòu)造器注入
構(gòu)造器注入代碼片段
 3. autowire
可以針對單個(gè)Bean進(jìn)行設(shè)置啄枕,主要為了減少xml注入配置
UserService中存在setUserDao(UserDAO userDao方法)
autowire配置
UserService 中存在接收UserDAO 類型的setter方法婚陪,Spring就自動(dòng)byType 按照類型匹配,即userDao就是UserService的屬性频祝,根據(jù)userDao這個(gè)屬性名泌参,去配置文件中找到相同名字的bean,將該bean的對象注入userService中常空, 這樣在用userDao對象時(shí)可以直接使用該對象沽一, 不需要new了。