一、spring的概念
spring是一個開源的,輕量級控制反轉和面向切面的容器框架,解決企業應用開發的復雜性,降低耦合,更易於測試。
spring春天。如果寫一個小的項目,我們可以在項目中想創建一個對象就創建i個對象,但對於大型項目來說,可能需要依賴幾百個類,類與類關系也非常復雜,我們就不能把創建對象和維護對象之間的關系放到項目中,可以采用生活中分工合作的方式,把對象的創建和維護關系給剝離出來,找一個工廠類的東西去干這些事,這樣項目如果需要對象了,就從工廠類中去取。
spring就是為了讓我們以后能夠做大的項目准備的。spring核心的功能就是一個工廠模式,spring相當於為你的項目專門成立一個工廠,這個工廠負責創建對象,委會對象之間的關系,以前是直接new,現在從spring的工廠里面獲取。
二、spring的bean的常用屬性
scope
scope用來配置bean對象是否是單例測試。單例模式是java的23種設計模式之一,指在這個項目運行過程中一個類的對象只會實例化一次。一般,工廠類的對象都是單例模式。非單例模式叫多例模式或者原型模式。
spring工廠中的對象默認都是單例模式,如果我們想把對象配置成多例模式,可以配置bean的scope屬性,scope常用的兩個取值:
singleon默認值 單例模式
prototype 原型模式 多例模式
單例模式下,對象是在工廠初始化的時候創建的。多例模式是在工廠初始化之后,獲取對象的時候創建的。
autowire
autowire用來配置spring對象屬性的默認的裝配方式。有三個取值
no:默認值 不啟用自動裝配
byType:根據類型自動裝配
byName:根據名稱自動裝配,一般bean的name如果不聲明 默認值取的就是id
三、spring的bean的 屬性注入的兩種方式
設值注入
設值注入要求:
要求屬性在實體類中必須有getter和setter方法,然后在spring的工廠中就可以使用property標簽進行設值注入。
構造注入
通過類的構造方法的方式注入
第一步,在要bean對應的class中創建有參的構造
第二步,在spring的工廠中配置
注:設值注入的優缺點:使用起來比較直觀,以后項目中大多數情況都采用設值注入。必須給屬性是生成getter和setter
構造注入的優缺點:不用給屬性生成getter和setter方法 了,但是看起來不太直觀。
四、spring的注解配置
使用bean的方式配置spring比較麻煩,開發中經常使用注解的方式配置spring
1 package com.aaa.spring.entity; 2 import org.springframework.beans.factory.annotation.Autowirimport org.springframework.stereotype.Component; 3 import java.security.spec.DSAGenParameterSpec; 4 /** 5 * 組裝E470筆記本 6 */ 7 @Component 8 public class E470 { 9 //這里需要依賴接口 10 //Autowired默認按類型自動裝配 11 @Autowired 12 private Display display; 13 @Autowired 14 private Cpu cpu; 15 /** 16 * 筆記本工作的方法 17 */ 18 public void work(){ 19 //cpu進行計算 20 cpu.calc(); 21 //顯示器顯示 22 display.display(); 23 }public Display getDisplay() { 24 return display; 25 } 26 public void setDisplay(Display display) { 27 this.display = display; 28 } 29 public Cpu getCpu() { 30 return cpu; 31 } 32 public void setCpu(Cpu cpu) { 33 this.cpu = cpu; 34 } 35 }
@Component注解
同我們使用bean的方式創建對象,加了@Component注解的類會在spring的工廠中創建該對象,該對象的id為@Component注解的類的名稱,但是首字母是看第二個字母的,若第二個字母是小寫,首字母小寫,第二個字母大寫,首字母就為大寫。
@Autowird自動按類型裝配
注:需要在配置文件中掃描配置@Component類所在的包
總結:
1、spring是一個容器類的框架 兩個作用:1、創建對象 2、維護對象之間的關系
2、spring的基本配置
3、常用的bean的屬性 scope singleton prototype
4、bean注入的兩種方式 設值注入 屬性必須有getter和setter 構造注入 必須要有有參構造
5、spring的注解配置
面試題:
1、你怎么理解spring的di和ioc
di依賴注入描述對象之間的依賴關系 在spring工廠中設值注入或者構造注入維護關系
ioc 控制反轉 描述對象創建方式的改變 原來創建對象在程序中,用來spring之后在工廠中創建獨享
2、spring中@Autowired和@Resource的區別是什么
@Autowired按類型自動裝配
@Resource先按類型自動裝配 再按屬性名稱自動裝配