1.方便解耦,簡化開發
通過Spring 提供的IoC 容器,可以將對象之間的依賴關係交由Spring 進行控制,避免硬編碼
所造成的過度程序耦合。
Controller
@Autowired
private UserService userService;
2.AOP 編程的支持
通過Spring 提供的AOP 功能,方便進行面向切面的編程,如性能監測、事務管理、日誌記
錄等。
3.聲明式事務的支持
4.方便集成各種優秀框架
5.降低Java EE API 的使用難度
如對JDBC,JavaMail,遠程調用等提供了簡便封封裝
IOC 控制反轉:說的是創建對象實例的控制權從代碼控制剝離到IOC 容器控制,側重於原理。
DI 依賴注入:說的是創建對象實例時,為這個對象注入屬性值或其它對象實例,側重於實
現。
控制反轉是一種思想,如何實現控制反轉呢,注入是一種實現手段。
在Java 中依然注入有以下三種實現方式:
1. 構造器注入
2. Setter 方法注入
3. 介面注入
Spring 中BeanFactory 介面是Spring IoC 容器的核心介面。ApplicationContex 介面對
BeanFactory(是一個子介面)進行了擴展.我們常用的ClassPathXmlApplicationContext
Web.xml 監聽器來負責啟動初始化spring 容器
基於XML 和基於註解,管理依賴用註解,事務用XML
1,配置數據源
2,配置事務管理器,引用數據源
3,配置事務策略,引用事務管理器
4,配置事務的AOP,設置哪些類的哪些方法需要應用這個事務策略
singleton 這種bean 範圍是默認的,這種範圍確保不管接受到多少個請求,每個容器中只有
一個bean 的實例,單例的模式由bean factory 自身來維護。
prototype 原形範圍與單例範圍相反,為每一個bean 請求提供一個實例
實際的應用場景:
Service,dao---單例
Struts2 action---多例prototype
Spring框架並沒有對單例bean 進行任何多線程的封裝處理。關於單例bean 的線程安全和並
發問題需要開發者自行去搞定。但實際上,大部分的Spring bean 並沒有可變的狀態(比如
Service 類和DAO 類),所以在某種程度上說Spring 的單例bean 是線程安全的。如果你的bean
有多種狀態的話(比如View Model 對象),就需要自行保證線程安全。
有狀態的bean,無狀態的bean6) 什麼是bean 的裝配
裝配,或bean 裝配是指在Spring 容器中把bean 組裝到一起,前提是容器需要知道bean 的
依賴關係,如何通過依賴注入來把它們裝配到一起。
例子:
就是把dao 對象注入給service 對象,這個過程就叫裝配
在Spring 框架中,在配置文件中設定bean 的依賴關係是一個很好的機制,Spring 容器還可
以自動裝配合作關係bean 之間的關聯關係。
一種是在XML 的配置文件中,
<bean id="userBiz" class="com.qianfeng.biz.impl.UserBizImpl" autowire="byName"/>
加上autowire="byName" 或autowire="byType"
一種是註解的方式,<context:annotation-config />,然後在類中用@Autowired 即可
@Controller
Public class UserController{
@AutoWried
private IUserService userService;
}
@Service
Public class UserServiceImpl implements IUserService{
@Autowried
Private IUserDao userDao;
byName:該選項可以根據bean 名稱設置依賴關係。當向一個bean 中自動裝配一個屬性時,
容器將根據bean 的名稱自動在在配置文件中查詢一個匹配的bean。如果找到的話,就裝配
這個屬性,如果沒找到的話就報錯。
byType:該選項可以根據bean 類型設置依賴關係。當向一個bean 中自動裝配一個屬性時,
容器將根據bean 的類型自動在在配置文件中查詢一個匹配的bean。如果找到的話,就裝配
讀者福利(學習分享)
小朔哥的Java路呀?zhuanlan.zhihu.com 推薦閱讀: