写点什么

SpringIOC 中复杂属性如何“巧妙”赋值,java 五年工作经验面试题

作者:Java高工P7
  • 2021 年 11 月 10 日
  • 本文字数:2622 字

    阅读完需:约 9 分钟

<bean id="car01" class="com.spring.beans.Car">


<property name="carName" value="凯迪拉克"></property>


<property name="price" value="200000"></property>


<property name="color" value="black"></property>


</bean>


<bean id="person01" class="com.spring.beans.Person">


<property name="car" ref="car01"></property>


</bean>

(2)、引用新的类对象赋值

除了上面的引用方法以外,我们还可以直接在对 person 赋值时,对其中的 car 对象进行赋值,也就是直接在 person 的<bean></bean>标签中给 car 对象赋值即可,


使用该方法时需要在对 car 属性赋值的<property></porperty>标签内部写一个新的<bean></bean>标签,在其中对 car 对象进行赋值。


实例如下:


<bean id="person01" class="com.spring.beans.Person">


<property name="car" >


<bean class="com.spring.beans.Car">


<property name="carName" value="五菱宏光"></property>


<property name="price" value="100"></property>


</bean>


</property>


</bean>


我们来测试一下,获取到 IOC 中的 person 对象,读取其中的 car 属性


//***进行多值赋值,获取 bean 对象


ApplicationContext iocContext2 = new ClassPathXmlApplicationContext("ioc2.xml");


/**


  • 为类属性进行赋值并获取

  • */


@Test


public void test05() {


Person person = (Person)iocContext2.getBean("person01");


Car car = person.getCar();


System.out.println(car);


}


2、为 List 属性赋值




为 list 属性进行赋值时需要用到 list 标签,在<list></list>中写入要存放到 list 中的


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


元素值。


这里的<list></list>标签就相当于 new arraylist<Class>(),在其中写入元素值。具体使用看代码:


<bean id="person02" class="com.spring.beans.Person">


<property name="books">


<list>


<bean class="com.spring.beans.Book" p:bookName="西游记" p:author="吴承恩">


</bean>


<ref bean="book01"/>


</list>


</property>


</bean>


在<list></list>标签中还包含很多其他的标签可以使用,因为我们例子中的 list 中存放的是 book 类,所以我们这里只是在其中存放了两个 book 对象。


其中还有很多标签如<value></value>、<map></map>等,对于存放 String 的 list 我们就可以直接<value></value>用进行赋值,如<value>1</value>


3、为 map 属性赋值




我们知道 map 是以键值对的形式进行存储的,而且其中有时候也可以存放多种类型的数据,那么对于 map 类型的属性又应该如何进行赋值的呢?


与 list 赋值相似,这里在 map 中存放的数据需要写在<map></map>标签内,同时使用特定的<entry></entry>标签写入元素, 一个 entry 就可以创建一个 key 和 value,


同时 value 的类型不同,所赋值的方法也不同,对于普通的 value 直接使用 value=””即可,对于引用对象使用 value-ref、对于新的 bean 对象或者 list 对象就需要在<entry></entry>标签中进行创建了,具体使用可以看下面的代码:


<bean id="person02" class="com.spring.beans.Person">


<property name="maps">


<map>


<entry key="key01" value="张三"></entry>


<entry key="key02" value-ref="car01"></entry>


<entry key="key03">


<bean class="com.spring.beans.Book" p:bookName="三国演义" p:author="罗贯中"></bean>


</entry>


</map>


</property>


4、为 Properties 类赋值




**首先,何为 Properties 类?**Properties 类位于 java.util.Properties ,是 Java 语言的配置文件所使用的类, Xxx.properties 为 Java 语言常见的配置文件,如数据库的配置 jdbc.properties, 系统参数配置 system.properties。 Properties 类具体使用时以 key=value 的键值对的形式进行存储值。 key 值不能重复。


在 IOC 中对 Properties 对象进行赋值时,需要书写在<props></props>标签中,**使用<props>定义 java.util.Properties,该标签使用多个<prop>作为子标签。每个<prop>标签必须定义 key 属性,**如我们在进行数据库连接时在 IOC 容器中书写的配置:


<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>


三、级联属性赋值


============


采用级联属性进行赋值,是对属性的属性进行赋值,如我们的 person 对象中有一个 car 属性,而 car 属性中还有 carName、price 等属性,


**看下面这样一个情况:**如果我们使用引用赋值的形式对 car 属性进行赋值,但是引用其中的 price 属性并不是我们想要的,我们想要将 price 改成 999,那么这个时候就需要用到级联属性。


具体使用是在<bean></bean>中重新写一个<property></property>标签,在其中对 car 属性的 price 属性进行赋值,具体代码如下:


<bean id="person03" class="com.spring.beans.Person">


<property name="car" ref="car01"></property>


<property name="car.price" value="999"></property>


</bean>


四、IOC 中属性类的继承


================


我们知道 Java 中可以使用 extend 进行类的继承,那你知道在 spring 的 IOC 中也可以实现类的继承吗?


看这样一个实例:



我们现在有 person04,并且已经为其赋好值了,现在又有了一个 person05,并且其中有很多属性与 person04 相同(当然也有不一样的),那么现在如果我们再去对 person05 重新赋值未免有些太麻烦,那么我们就可以将 person04 作为一个抽象类,专门用来被继承,而且让 person05 继承该抽象类,对于特有的属性值再修改即可。


在 springIOC 中 abstract 参数用来表示该类是否是抽象类,值为“true”时是抽象类,为“false”时不是抽象类。


对于需要继承该抽象类的类,使用 parent 参数来声明继承哪个类。同时对于特有的需要修改的属性值,我们可以直接在<bean></bean>标签中使用<property></property>进行赋值。操作代码如下:


<bean id="person04" class="com.spring.beans.Person" abstract="true">


<property name="name" value="继承爸爸"></property>


<property name="sex" value="男"></property>


<property name="age" value="40"></property>


<property name="email" value="baba@qq.com"></property>


</bean>


<bean id="person05" class="com.spring.beans.Person" parent="person04">


<property name="name" value="继承儿子"></property>


<property name="age" value="20"></property>


</bean>


五、写在最后


==========

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
SpringIOC中复杂属性如何“巧妙”赋值,java五年工作经验面试题