day1 Spring IOC 和 AOP 為內核 IOC inverse of control 控制反轉 AOP aspect oriented programing 面向切麵編程 展現層 WEB SpringMVC 持久層 DAO Spring JDBCTemplate 業務層 SERIVICE ...
day1
Spring
IOC 和 AOP 為內核
IOC inverse of control 控制反轉
AOP aspect oriented programing 面向切麵編程
展現層 WEB
SpringMVC
持久層 DAO
Spring JDBCTemplate
業務層 SERIVICE
事務管理
Spring發展
- Rod Johns Spring之父
- 學習Spring5.0.5
Spring優勢
- 方便解耦,簡便開發
- 對象創建權給Spring完成 對象放在容器中
- AOP 編程支持
- 面向切麵編程
- 聲明式事務控制
- 配置的方法
- 方便程式的測試
- 繼承眾多優秀框架
- 降低JavaEE的使用難度
- Spring對JavaEEAPI進行了封裝層 模板Template
- Java源碼是經典的學習典範
Spring體繫結構
CoreContainer
Beans 容器產生對象
Core 核心
Context 行下文
SpEL SpringExpressionLanguage Spring表達式語言
AOP切麵
dataAccess
Web
Spring程式開發步驟
- 導入Spring基本包
- 編寫Dao介面及其實現
- 創建Spring核心配置文件
- 在Spring配置介面
IOC
- 編寫需要放入容器中的類
- 創建XML配置文件,文件名習慣為applicationContext.xml
- 利用Bean標簽將需要的對象放入bean容器中,id隨便取,class為需要裝入容器中的類的全包名,spring內部會通過classname.class.getContructor().newInstance()創建實例對象,無參構造創建
<bean id="UserDao" class="cn.gyk.dao.Impl.UserDaoImpl"/>
id 是唯一性表示,不允許重覆
class 全限定名
Bean標簽的範圍設置 scope屬性
- singleton 單一的唯一的,用的是設計模式裡面的單例模式,容器之中對象唯一
- prototype 多例的 ,每次getbean都會創建一個新的對象
- request
- session
- global session
以上三種會把對象放到容器的同時也會把對象放到相應的request、sessioni、全局session域中方便獲取,配置需要在web環境下
單元測試
- Junit單元測試
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
Bean的創建時機
- 從容器中獲取的對象是使用無參構造函數,在無參構造函數中列印一句話方便查看對象的創建時機
- scope 設置為 singleton 時 當載入配置文件創建spring容器的時候設置為singleton的對象就創建 因為是單例模式,所以在初始化容器的時候就創建所有的單例對象,這個對象有切僅有一個
- 創建時機:當配置文件被載入時,對象就被創建了
- 對象運行:只要容器在,對象就一直在記憶體中
- 對象銷毀:當應用卸載,銷毀容器時,對象就被銷毀了
- scope 設置為 prototype bean的創建時機是在getBean時才創建
- 創建實際: 當使用對象時(getBean),創建新的對象實例
- 對象運行:只要在使用對象就一直存在
- 對象銷毀:對象長時間不適用,被Java垃圾回收機制回收
Bean生命周期配置
- init-method 指定類的初始化方法
- destory-method 指定類的銷毀方法
//在對象的類中添加兩個方法,名字隨便
public void init(){
System.out.println("initialized...");
}
public void destroy(){
System.out.println("destroy...");
}
<!-- 通過在xml配置文件中配置方法 -->
<bean id="UserDao" class="cn.gyk.dao.Impl.UserDaoImpl"scope="prototype" init-method="init" destroy-method="destroy"/>
Bean實例化的三種方式
- 無參構造方法實例化
- 工廠靜態方法實例化
//創建對象那個的工廠方法
public class StaticFactory {
public static UserDao getUserDao(){
return new UserDaoImpl();
}
<!-- xml 文件配置更改-->
<bean id="UserDao" class="cn.gyk.factory.StaticFactory" factory-method="getUserDao" scope="singleton" />
-
通過factory-method屬性指定生成對象的工廠方法
-
工廠實例方法實例化
-
這種方法需要現有工廠對象才能調用方法
-
- 先把工廠對象放到Spring容器中,Spring通過無參構造創建工廠對象
-
<bean id="DynamicFactory" class="cn.gyk.factory.DynamicFactory" scope="singleton"/>
-
- 再配置獲取UserDao的Bean
-
<bean id="UserDao" factory-bean="DynamicFactory" factory- +method="getUserDao"/>
factory-bean是指定再Spring容器中的工廠方法,factory-method是指定工廠方法中創建對象的方法