(一)Spring 的 IoC 学习
在 applicationContext.xml 来配置 bean, 通过该接口, 在主程序中, 可以指定初始化的对象, 不需要在进行赋值操作, 直接在 xml 里配置好.
接下来分享的是 bean 配置的多种方法:
1通过类的 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();
输出该对象的信息:
2通过类型获取 bean, 缺点是只能是一个该类型的 bean 对象, 如果有多个则会出错, 多个可以通过 id 的方式来进行获取
例如上面的 user 对象, 在主函数中可以这样获取:
- ApplicationContext aContext=new ClassPathXmlApplicationContext("applicationContext.xml");
- user beanUser=aContext.getBean(user.class);
- beanUser.print();
得到的结果和上面的一样
二, 给 bean 的属性赋值多种操作
1直接通过 < property name="name" value="Spring"></property > 利用 name,value 的方式进行赋值
2通过构造器进行赋值, 前提在 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" />
三, 内部 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>
四, 集合属性
1List 和 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);
结果为:
2Properties
使用 < 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>
3集合类型的 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>
五, 级联属性
含义: 可以控制属性的属性
可以改变 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
来源: https://www.cnblogs.com/xiaofengzai/p/12640003.html