(一)Spring的IOC學習java
在applicationContext.xml來配置bean,經過該接口,在主程序中,能夠指定初始化的對象,不須要在進行賦值操做,直接在xml裏配置好。mysql
接下來分享的是bean配置的多種方法:spring
①經過類的id獲取beansql
<bean id="user" class="com.author.bean.user"> <property name="name" value="Spring"></property> <property name="age" value="18"></property> <property name="sex" value="男"></property> </bean>
在主函數中,經過容器裏的id來獲取bean對象app
ApplicationContext aContext=new ClassPathXmlApplicationContext("applicationContext.xml"); user beanUser=(user)aContext.getBean("user"); beanUser.print();
輸出該對象的信息:函數
②經過類型獲取bean,缺點是隻能是一個該類型的bean對象,若是有多個則會出錯,多個能夠經過id的方式來進行獲取學習
例如上面的user對象,在主函數中能夠這樣獲取:ui
ApplicationContext aContext=new ClassPathXmlApplicationContext("applicationContext.xml"); user beanUser=aContext.getBean(user.class); beanUser.print();
獲得的結果和上面的同樣url
2、給bean的屬性賦值多種操做spa
①直接經過<property name="name" value="Spring"></property>利用name,value的方式進行賦值
②經過構造器進行賦值,前提在bean類中有該構造函數
<bean id="user03" class="com.author.bean.user"> <constructor-arg name="name" value="小明"></constructor-arg> <constructor-arg name="age" value="18"></constructor-arg> <constructor-arg name="sex" value="男"></constructor-arg> </bean>
還能夠直接省略name屬性:
<!-- 省略name屬性 --> <bean id="user04" class="com.author.bean.user"> <constructor-arg value="校花"></constructor-arg> <constructor-arg value="10"></constructor-arg> <constructor-arg value="女"></constructor-arg> </bean>
經過索引值指定參數位置
<bean id="book" class="com.atguigu.spring.bean.Book" > <constructor-arg value= "10010" index ="0"/> <constructor-arg value= "Book01" index ="1"/> <constructor-arg value= "Author01" index ="2"/> <constructor-arg value= "20.2" index ="3"/> </bean >
經過類型不一樣區分重載的構造器
<bean id="book" class="com.atguigu.spring.bean.Book" > <constructor-arg value= "10010" index ="0" type="java.lang.Integer" /> <constructor-arg value= "Book01" index ="1" type="java.lang.String" /> <constructor-arg value= "Author01" index ="2" type="java.lang.String" /> <constructor-arg value= "20.2" index ="3" type="java.lang.Double" /> </bean >
p名稱空間:爲了簡化XML文件的配置,愈來愈多的XML文件採用屬性而非子元素配置信息。
須要導入:xmlns:p="http://www.springframework.org/schema/p"
<bean id="studentSuper" class="com.atguigu.helloworld.bean.Student" p:studentId="2002" p:stuName="Jerry2016" p:age="18" />
3、內部bean對象以及引用對象
經過<null/>指定空元素
引用對象的使用:ref=「引用外部對象的id」
<bean id="car01" class="com.author.bean.car"> <constructor-arg value="寶馬" ></constructor-arg> <constructor-arg value="藍白色"></constructor-arg> <constructor-arg value="30000"></constructor-arg> </bean> <bean id="user05" class="com.author.bean.user"> <property name="name"> <null></null> </property> <!-- ref引用的是外部的bean --> <property name="car" ref="car01"></property> </bean>
內部bean對象:至關於car=new car(),car對象在user對象裏
<bean id="car01" class="com.author.bean.car"> <constructor-arg value="寶馬" ></constructor-arg> <constructor-arg value="藍白色"></constructor-arg> <constructor-arg value="30000"></constructor-arg> </bean> <bean id="user05" class="com.author.bean.user"> <property name="name"> <null></null> </property> <!-- 至關於car=new car() 引用內部bean --> <property name="car"> <bean class="com.author.bean.car"> <property name="name" value="自行車"></property> </bean> </property> </bean>
4、集合屬性
①List和map
List集合裏包括:一個自定義的對象,一個引用對象。
配置java.util.List類型的屬性,須要指定<list>標籤,在標籤裏包含一些元素。
這些標籤能夠經過<value>指定簡單的常量值,經過<ref>指定對其餘Bean的引用。
經過<bean>指定內置bean定義。經過<null/>指定空元素。
Map集合裏包括:2個value,一個引用,一個自定義對象,都對應着不一樣的key值
<map>標籤裏可使用多個<entry>做爲子標籤。每一個條目包含一個鍵和一個值。
必須在<key>標籤裏定義鍵。
由於鍵和值的類型沒有限制,因此能夠自由地爲它們指定<value>、<ref>、<bean>或<null/>元素。
能夠將Map的鍵和值做爲<entry>的屬性定義:簡單常量使用key和value來定義;bean引用經過key-ref和value-ref屬性定義。
<bean id="refbook" class="com.author.bean.Book"> <property name="name" value="西廂記"></property> </bean> <bean id="user06" class="com.author.bean.user"> <property name="books"> <list> <!-- list標籤體中添加每個元素 --> <bean class="com.author.bean.Book"> <property name="name" value="西遊記"></property> <property name="author" value="吳承恩"></property> <property name="price" value="80"></property> </bean> <ref bean="refbook"></ref> </list> </property> <property name="maps"> <map> <entry key="key01" value="張三"></entry> <entry key="key02" value="18"></entry> <entry key="key03" value-ref="refbook"></entry> <entry key="key04"> <bean class="com.author.bean.car"> <property name="name" value="寶馬"> </property> </bean> </entry> </map> </property> </bean>
在主函數中,輸出結果:
user beanUser2=(user)aContext.getBean("user06");
System.out.println(beanUser2.books);
System.out.println(beanUser2.maps);
結果爲:
②Properties
使用<props>定義java.util.Properties,該標籤使用多個<prop>做爲子標籤。每一個<prop>標籤必須定義key屬性
<bean class="com.atguigu.spring.bean.DataSource" id="dataSource"> <property name="properties"> <props> <prop key="userName">root</prop> <prop key="password">root</prop> <prop key="url">jdbc:mysql:///test</prop> <prop key="driverClass">com.mysql.jdbc.Driver</prop> </props> </property> </bean>
③集合類型的bean
若是隻能將集合對象配置在某個bean內部,則這個集合的配置將不能重用。咱們須要將集合bean的配置拿到外面,供其餘bean引用。
配置集合類型的bean須要引入util名稱空間:xmlns:util="http://www.springframework.org/schema/util"
<util:map id="myMap"> <entry key="key01" value="張三"></entry> <entry key="key02" value="18"></entry> <entry key="key03" value-ref="refbook"></entry> <entry key="key04"> <bean class="com.author.bean.car"> <property name="name" value="寶馬"> </property> </bean> </entry> </util:map> <util:list id="myList"> <bean class="com.author.bean.Book"></bean> <value>12</value> <ref bean="myMap"></ref> </util:list>
5、級聯屬性
含義:能夠控制屬性的屬性
能夠改變user07下的car的price屬性,若是car爲引用對象,那麼引用對象也會被修改
<!-- 級聯屬性能夠控制屬性的屬性 --> <bean id="user07" class="com.author.bean.user"> <property name="car" ref="car01"></property> <property name="car.price" value="900000"></property> </bean>
--------------這就是今天分享的bean的配置操做。
明天學習:利用工廠來建立bean