Spring Bean基本管理實(shí)例詳解
本文實(shí)例講述了Spring Bean基本管理。分享給大家供大家參考,具體如下:
一、使用setter方式完成依賴注入
下面是Bean和beans-config.xml文件。
public class HelloBean { private String helloWord; //...省略getter、setter方法 }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="helloBean" class="onlyfun.caterpillar.HelloBean"> <property name="helloWord"> <value>Hello!Justin!</value> </property> </bean> </beans>
public class SpringDemo { public static void main(String[] args) { Resource rs = new FileSystemResource("beans-config.xml"); BeanFactory factory = new XmlBeanFactory(rs); HelloBean hello = (HelloBean) factory.getBean("helloBean"); System.out.println(hello.getHelloWord()); } }
二、使用constructor方式完成注入
public class HelloBean { private String name; private String helloWord; // 建議有要無參數(shù)建構(gòu)方法 public HelloBean() { } public HelloBean(String name, String helloWord) { this.name = name; this.helloWord = helloWord; } //...省略getter、setter方法 }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="helloBean" class="onlyfun.caterpillar.HelloBean"> <constructor-arg index="0"> <value>Justin</value> </constructor-arg> <constructor-arg index="1"> <value>Hello</value> </constructor-arg> </bean> </beans>
public class SpringDemo { public static void main(String[] args) { ApplicationContext context = new FileSystemXmlApplicationContext("beans-config.xml"); HelloBean hello = (HelloBean) context.getBean("helloBean"); System.out.print("Name: "); System.out.println(hello.getName()); System.out.print("Word: "); System.out.println(hello.getHelloWord()); } }
三、屬性參考
public class HelloBean { private String helloWord; private Date date; //...省略getter、setter方法 }
<beans> <bean id="dateBean" class="java.util.Date"/> <bean id="helloBean" class="onlyfun.caterpillar.HelloBean"> <property name="helloWord"> <value>Hello!</value> </property> <property name="date"> <ref bean="dateBean"/> </property> </bean> </beans>
public class SpringDemo { public static void main(String[] args) { ApplicationContext context = new FileSystemXmlApplicationContext("beans-config.xml"); HelloBean hello = (HelloBean) context.getBean("helloBean"); System.out.print(hello.getHelloWord()); System.out.print(" It's "); System.out.print(hello.getDate()); System.out.println("."); } }
四、“byType”自動(dòng)綁定
將“三”中的配置文件改為下面,即可完成bean屬性的按類型自動(dòng)綁定。
<beans> <bean id="dateBean" class="java.util.Date"/> <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="byType"> <property name="helloWord"> <value>Hello!</value> </property> </bean> </beans>
五、“byName”自動(dòng)綁定
將“三”中的配置文件改為下面,即可完成bean屬性的按名稱自動(dòng)綁定。
<beans> <bean id="dateBean" class="java.util.Date"/> <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="byName"> <property name="helloWord"> <value>Hello!</value> </property> </bean> </beans>
六、“constructor”自動(dòng)綁定
將“三”中的配置文件改為下面,即可完成bean屬性的按構(gòu)造方法自動(dòng)綁定。在建立依賴關(guān)系時(shí),Srping容器會(huì)試圖比對(duì)容器中的Bean實(shí)例類型,及相關(guān)的構(gòu)造方法上的參數(shù)類型,看看在類型上是否符合,如果有的話,則選用該構(gòu)造方法來建立Bean實(shí)例。如果無法綁定,則拋出org.springframework.beans.factory.UnsatisfiedDependencyException異常。
<beans> <bean id="dateBean" class="java.util.Date"/> <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="constructor"> <property name="helloWord"> <value>Hello!</value> </property> </bean> </beans>
六、“autodetect”自動(dòng)綁定
將“三”中的配置文件改為下面,即可完成bean屬性的自動(dòng)綁定,這個(gè)自動(dòng)綁定是Spring會(huì)嘗試用入constructor來處理依賴關(guān)系的建立,如果不行,則再嘗試用byType類建立依賴關(guān)系。
<beans> <bean id="dateBean" class="java.util.Date"/> <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="autodetect"> <property name="helloWord"> <value>Hello!</value> </property> </bean> </beans>
七、依賴檢查方式
在自動(dòng)綁定中,由于沒辦法從定義文件中,清楚地看到是否每個(gè)屬性都完成設(shè)定,為了確定某些依賴關(guān)系確實(shí)建立,您可以假如依賴檢查,在<bean>標(biāo)簽使用時(shí)設(shè)定"dependency-check",可以有四種依賴檢查方式:simple、objects、all、none。
simple:只檢查簡(jiǎn)單的類型(像原生數(shù)據(jù)類型或字符串對(duì)象)屬性是否完成依賴關(guān)系,。
objects:檢查對(duì)象類型的屬性是否完成依賴關(guān)系。
all:則檢查全部的屬性是否完成依賴關(guān)系。
none:設(shè)定是默認(rèn)值,表示不檢查依賴性。
<beans> <bean id="dateBean" class="java.util.Date"/> <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="autodetect" dependeny-check="all"> <property name="helloWord"> <value>Hello!</value> </property> </bean> </beans>
八、集合對(duì)象注入
對(duì)于像數(shù)組、List、Set、Map等集合對(duì)象,在注入前必須填充一些對(duì)象至集合中,然后再將集合對(duì)象注入至所需的Bean時(shí),也可以交由Spring的IoC容器來自動(dòng)維護(hù)或生成集合對(duì)象,并完成依賴注入。
public class SomeBean { private String[] someStrArray; private Some[] someObjArray; private List someList; private Map someMap; public String[] getSomeStrArray() { return someStrArray; } public void setSomeStrArray(String[] someStrArray) { this.someStrArray = someStrArray; } public Some[] getSomeObjArray() { return someObjArray; } public void setSomeObjArray(Some[] someObjArray) { this.someObjArray = someObjArray; } public List getSomeList() { return someList; } public void setSomeList(List someList) { this.someList = someList; } public Map getSomeMap() { return someMap; } public void setSomeMap(Map someMap) { this.someMap = someMap; } } public class Some { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString() { return name; } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="some1" class="onlyfun.caterpillar.Some"> <property name="name"> <value>Justin</value> </property> </bean> <bean id="some2" class="onlyfun.caterpillar.Some"> <property name="name"> <value>momor</value> </property> </bean> <bean id="someBean" class="onlyfun.caterpillar.SomeBean"> <property name="someStrArray"> <list> <value>Hello</value> <value>Welcome</value> </list> </property> <property name="someObjArray"> <list> <ref bean="some1"/> <ref bean="some2"/> </list> </property> <property name="someList"> <list> <value>ListTest</value> <ref bean="some1"/> <ref bean="some2"/> </list> </property> <property name="someMap"> <map> <entry key="MapTest"> <value>Hello!Justin!</value> </entry> <entry key="someKey1"> <ref bean="some1"/> </entry> </map> </property> </bean> </beans>
public class SpringDemo { public static void main(String[] args) { ApplicationContext context = new FileSystemXmlApplicationContext( "beans-config.xml"); SomeBean someBean = (SomeBean) context.getBean("someBean"); // 取得數(shù)組型態(tài)依賴注入對(duì)象 String[] strs = (String[]) someBean.getSomeStrArray(); Some[] somes = (Some[]) someBean.getSomeObjArray(); for(int i = 0; i < strs.length; i++) { System.out.println(strs[i] + "," + somes[i].getName()); } // 取得List型態(tài)依賴注入對(duì)象 System.out.println(); List someList = (List) someBean.getSomeList(); for(int i = 0; i < someList.size(); i++) { System.out.println(someList.get(i)); } // 取得Map型態(tài)依賴注入對(duì)象 System.out.println(); Map someMap = (Map) someBean.getSomeMap(); System.out.println(someMap.get("MapTest")); System.out.println(someMap.get("someKey1")); } }
希望本文所述對(duì)大家Java程序設(shè)計(jì)有所幫助。
相關(guān)文章
java虛擬機(jī)JVM類加載機(jī)制原理(面試必問)
這篇文章主要介紹了面試當(dāng)中必會(huì)問到的java虛擬機(jī)JVM類加載機(jī)制,非常的詳細(xì),有需要的朋友可以借鑒參考下,歡迎多多交流討論2021-08-08如何利用JConsole觀察分析Java程序的運(yùn)行并進(jìn)行排錯(cuò)調(diào)優(yōu)
從Java 5開始 引入了 JConsole。JConsole 是一個(gè)內(nèi)置 Java 性能分析器,可以從命令行或在 GUI shell 中運(yùn)行。您可以輕松地使用 JConsole(或者,它更高端的 “近親” VisualVM )來監(jiān)控 Java 應(yīng)用程序性能和跟蹤 Java 中的代碼2015-12-12Spring Cloud Gateway 使用JWT工具類做用戶登錄校驗(yàn)功能
這篇文章主要介紹了Spring Cloud Gateway 使用JWT工具類做用戶登錄校驗(yàn)的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01jsp頁面中獲取servlet請(qǐng)求中的參數(shù)的辦法詳解
在JAVA WEB應(yīng)用中,如何獲取servlet請(qǐng)求中的參數(shù),本文講解了jsp頁面中獲取servlet請(qǐng)求中的參數(shù)的辦法2018-03-03