控制反轉 inversion of control:
javabean以前由開發人員用代碼管理維護,現在對象的實例化和銷燬等全部由spring容器管理,實現控制的反轉。
這是一種編程思想,就是說一些非核心的代碼由框架自動實現管理,開發人員專注於業務邏輯。
依賴注入 dependency of injection :
對象內部需要用到其他javabean對象時,使用注入的方式引入。
理解
將bean的控制權移交給Spring容器 ,由Spring容器實現對 bean的管理。IOC 實現的過程需要對bean屬性實現注入,此時就需要用到DI。IOC與DI: 相輔相成、 相互合作,這是同一過程的不同角度的不同描述。Ioc和DI,並不算一種技術,是程序開發中的一種思想,利用spring的控制反轉和依賴注入,就不需要那麼多代碼,也不需要考慮對象間的耦合關係,由容器提供了對對象的管理,降低了代碼開發和維護的複雜度。總:降低耦合,簡化開發。
Ioc實例化對象的三種方法
1.構造器方法 。 bean必須有空構造器。
2.靜態工廠方法。 spring不創建, 由 工廠類提供靜態方法創建bean
3.實例化工廠方法 。 工廠類提供方法創建bean
注入的四種方法
1. setter方法注入。 注入的bean需要有相應的setter方法
2. 構造器方法注入。注入的bean需要有相應的帶參構造器
3. 靜態工廠方法注入
4. 實例化工廠注入。
注意加入循環依賴,不可構造器方法注入,使用setter方法注入
註解方式注入
1.加入context命名空間 2. 加入 <context:annotation-config/> 配置
@Autowired 屬性和set方法上 默認按照type類型尋找注入資源,可以使用@Qualifier來制定按照name注入
@Resource 屬性和set方法上默認按照name尋找注入資源,沒有那麼屬性按照type注入
自動掃描包: <context:component-scan base-package=“包路徑”
不同層使用不同註解
Dao 層: : @Repository
Service 層: : @Service
視圖控制層: : @Controller
bean作用域問題
1. singleton 作用域
單例,默認,lazy-init懶加載
提前發現潛在的配置問題
加快程序運行期速率
2. prototype
非單例,每次創建新的bean。
3. web作用域
request作用域
session作用域
bean的生命週期
定義 初始化 使用 銷燬
定義: 配置文件
初始化:配置文件中的init-methd 或者 InitializingBean接口
使用:beanFactory ApplicationContext
銷燬:配置文件的destroy方法 或者 AbstractApplicationContext的close方法。