(一)Spring的IOC学习
在applicationContext.xml来配置bean,通过该接口,在主程序中,可以指定初始化的对象,不需要在进行赋值操作,直接在xml里配置好。
接下来分享的是bean配置的多种方法:
①通过类的id获取bean
<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对象
ApplicationContext aContext=new ClassPathXmlApplicationContext("applicationContext.xml");
user beanUser=(user)aContext.getBean("user");
beanUser.print();
输出该对象的信息:
②通过类型获取bean,缺点是只能是一个该类型的bean对象,如果有多个则会出错,多个可以通过id的方式来进行获取
例如上面的user对象,在主函数中可以这样获取:
ApplicationContext aContext=new ClassPathXmlApplicationContext("applicationContext.xml"); user beanUser=aContext.getBean(user.class); beanUser.print();
得到的结果和上面的一样
二、给bean的属性赋值多种操作
①直接通过
②通过构造器进行赋值,前提在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属性:
<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" />
三、内部bean对象以及引用对象
通过
引用对象的使用: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> <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> <property name="car"> <bean class="com.author.bean.car"> <property name="name" value="自行车">property> bean> property> bean>
四、集合属性
①List和map
List集合里包括:一个自定义的对象,一个引用对象。
配置java.util.List类型的属性,需要指定标签,在标签里包含一些元素。
这些标签可以通过
通过
Map集合里包括:2个value,一个引用,一个自定义对象,都对应着不同的key值
必须在
因为键和值的类型没有限制,所以可以自由地为它们指定
可以将Map的键和值作为
<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> <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
使用
<bean class="com.atguigu.spring.bean.DataSource" id="dataSource"> <property name="properties"> <props> <prop key="userName">rootprop> <prop key="password">rootprop> <prop key="url">jdbc:mysql:///testprop> <prop key="driverClass">com.mysql.jdbc.Driverprop> 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>12value> <ref bean="myMap">ref> util:list>
五、级联属性
含义:可以控制属性的属性
可以改变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