spring级联属性赋值的两种方式解析

这篇文章主要介绍了spring级联属性赋值的两种方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Car.java

package com.gong.spring.beans;

public class Car {
  private String name;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  @Override
  public String toString() {
    return "Car [name=" + name + "]";
  }

}

Student.java

package com.gong.spring.beans;

public class Student {
  private String name;
  private int age;
  private double score;
  private Car car;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public double getscore() {
    return score;
  }
  public void setscore(double score) {
    this.score = score;
  }
  public Car getCar() {
    return car;
  }
  public void setCar(Car car) {
    this.car = car;
  }
  @Override
  public String toString() {
    return "Student [name=" + name + ",age=" + age + ",score=" + score + ",car=" + car + "]";
  }

}

一、利用setter方法进行赋值

在bean中需要赋值的属性必须要有setter方法,同时bean中必须还要有一个无参的构造方法。如若不显示声明,则默认会有一个。

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="car" class="com.gong.spring.beans.Car"></bean>

  <bean id="student" class="com.gong.spring.beans.Student">
    <property name="name" value="tom"></property>
    <property name="age" value="12"></property>
    <property name="score" value="98.00"></property>
    <property name="car" ref="car"></property>
    <property name="car.name" value="baoma"></property>
  </bean>

</beans>

关键就是标红的两个代码:先进行关联,然后进行级联赋值。

二、利用构造方法进行级联赋值

此时,要在Person中加一个有参构造方法

public Student(String name,int age,double score,Car car) {
    super();
    this.name = name;
    this.age = age;
    this.score = score;
    this.car = car;
  }

在Car中加一个无参构造方法

public Car() {
}

同时,对于这种方法,我们删除掉Person中name、age、score属性的getter和setter方法,保留car属性的getter和setter方法,程序仍然是可行的。

在applicationContext.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="car" class="com.gong.spring.beans.Car"></bean>

  <bean id="student" class="com.gong.spring.beans.Student">
    <constructor-arg value="tom"></constructor-arg>
    <constructor-arg value="12"></constructor-arg>
    <constructor-arg value="98.00"></constructor-arg>
    <constructor-arg ref="car"></constructor-arg>
    <property name="car.name" value="baoma"></property>
  </bean>
</beans>

总结:

1.利用setter方法进行级联属性赋值需要:无参构造方法、setter方法

2.利用构造器进行级联属性赋值需要:有参构造方法

3.为级联属性赋值,属性先要初始化之后才可以为级联属性赋值,否则会有异常,即:

<property name="car" ref="car"></property>
<constructor-arg ref="car"></constructor-arg>

而在struct2中则不用,它会自动进行初始化。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写:&#160;一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...