還在用絲襪哥(Swagger)做API文檔?快來看看這款幫你減少百分之九十工作量的開源工具!
689
2025-03-31
Spring對過去Bean配置文件的冗長性做出了很多重大改進,很多冗長的配置現在有了簡介的版本。并提供了多種配置方式,既可以使用其中的一種配置,也可以混合使用多種配置。
Spring容器啟動條件:
Spring框架的類包都在應用程序的類路徑下
應用程序為Spring提供完備的Bean配置信息
Bean的類都已經放到了應用程序的類路徑下
Bean的元數據信息包括:
Bean的實現類
Bean的屬性信息,資源連接數,用戶名密碼等
Bean的依賴關系
Bean的行為配置
基于xml文件的配置
文件頭聲明比較復雜,默認命名空間,xsi標準命名空間,自定義命名空間,并為每個命名空間指定Schema文件,以xsd結尾
Schema文檔格式定義文件語法:
Spring中裝配一個Bean。容器通過getBean(“foo”)即可得到相應的Java Bean
Spring中不能出現相同的id,但是可以出現相同的name,同name后面覆蓋前面的。
依賴注入:三種方式,屬性注入,構造函數注入,工廠方法注入
屬性注入:
最常用,可選擇性高,靈活性高
屬性注入要求Bean提供默認構造函數及需要注入屬性的Setter方法。先調用默認構造器構造對象,再通過反射調用Setter方法進行屬性值的注入。
注意property name=“xxx”和Bean內部屬性名xxx的一致性。
屬性命名規則:變量的前兩個字母要么全部大寫,要么全部小寫。
構造函數注入:通過不同的構造方法屬性實現注入。
循環依賴問題:如果兩個Bean采用構造函數注入,并且通過構造函數互相入參引用對方,就會發生類似死鎖的循環引用問題。
工廠方法配置不經常使用,正在逐漸淡出人們的視野。
字面值:指可以用字符串表示的值,這些值可以通過標簽進行注入。默認情況下基本數據類型及其封裝類,String類等都可以采用字面值注入的方式。對Boss類引用Car屬性并添加依賴關系。
Package com.baobaotao.attr; Public class Boss{ Private Car car; Public void setCar(Car car){ This.car = car; } }
1
2
3
4
5
6
7
8
Boss的Bean通過元素引用car Bean,建立起boss對car的依賴。
1
2
3
4
5
6
元素通過以下三個屬性引用容器中其它Bean。
:該屬性引用同一容器或者父容器的Bean
:只能引用同一配置文件中定義的Bean
:引用父容器中的Bean
內部Bean類似于java匿名內部類,不會被其他任何Bean引用。
如果需要注入null值,應當為
等同于調用car.setBrand(null)的方法。
級聯屬性:采用以下注入方式:
1
2
3
同時需要在Boss的對象元素內部設置
Private Car car = new Car();
否則將在Spring級聯配置的過程中拋出NullValueInNestedPathException
Spring為List,Map,Properties提供了配置方式。
同時也可以采用簡化配置方式進行簡化配置處理。
使用p命名空間
1
P:屬性名=xxx
自動裝配:
autowire=“<自動裝配類型>”
四種byName,根據名字
ByType根據屬性,比如Car類型
Constructor針對構造函數輸入而言的
Autodetect自動裝配,自動識別,在byName,byType和construstor
方法注入,使Boss可以每次通過getCar()都返回一個新的Car對象。
Lookup可以實現動態的注入。
replacer可以實現方法替換,一種很魔術的功能。
通過parent屬性實現Bean的繼承
通過實現依賴,也可以通過depends-on屬性來進行依賴管理。
Idref可以用來實現引用
Bean的作用域:singleton,prototype,request,session,globalSession
配置scope=“<作用域類型>”
基于注解的配置。@Component(“userDao”)
和
也有等效于@Component的注解
@RespositoryL用于對DAO實現類進行標注
@Service:用于對Service實現類進行標注
@Controller: 用于對Controller實現類進行標注
使用@Autowired注解,當且僅當有一個對應匹配的Bean的時候,就會被注入到變量中。
通過require屬性,可以在require=false時找不到也不會報錯
Spring 容器
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。