• 中文
    • English
  • 注册
  • 赞助本站

    • 支付宝
    • 微信
    • QQ

    感谢一直支持本站的所有人!

    • 查看作者
    • Spring:实体类和集合配置

      一.  实体类

      《Spring:使用构造方法创建对象》一文中,Book类中的属性都是简单类型,所以可以直接使用value赋值,但是如果一个类对象中的属性包含其他类,则不能使用value进行赋值。首先添加Person类:

      package io.zhangjia.entity;
      
      public class Person {
          private String name;
          private Integer age;
          private Book book;
      
          public Person() {
          }
      
          public Person(String name, Integer age, Book book) {
              this.name = name;
              this.age = age;
              this.book = book;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public Integer getAge() {
              return age;
          }
      
          public void setAge(Integer age) {
              this.age = age;
          }
      
          public Book getBook() {
              return book;
          }
      
          public void setBook(Book book) {
              this.book = book;
          }
      
          @Override
          public String toString() {
              return "Person{" +
                      "name='" + name + '\'' +
                      ", age=" + age +
                      ", book=" + book +
                      '}';
          }
      }

      此时的Person中的name和age属性还是简单类型,但是Book已经却是一个单独的Java类,所以此时的bean中不能再使用value为其赋值,需要使用ref属性通过引用其他的bean的方式为其赋值,ref的值就是  <bean id="book" 的id的值

      <?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="book" class="io.zhangjia.entity.Book">
              <property name="bookId" value="2"/>
              <property name="name" value="Spring开发"/>
              <property name="price" value="19.9"/>
              <property name="author" value="张三"/>
          </bean>
      
          <bean id="person" class="io.zhangjia.entity.Person">
      <!--     简单类型可以使用value完成属性的赋值,且property是单标签-->
              <property name="name" value="张三" />
              <property name="age" value="20" />
      <!--        使用ref引用其他的bean-->
              <property name="book" ref="book" />
          </bean>
      </beans>

      测试类:

      public class Test {
          public static void main(String[] args) throws Exception {
      //        初始化Spring的IOC容器
              ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
      //        根据id获取bean
              Object person = context.getBean("person");
              System.out.println("person = " + person);
      
          }
      }
      输出:
      person = Person{name='张三', age=20, book=Book{bookId=2, name='Spring开发', author='张三', price=19.9}}

      除了上述方式外,我们可以通过内部bean的方式为其赋值:

      <?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="person2" class="io.zhangjia.entity.Person">
              <property name="name" value="王五"/>
              <property name="age" value="21"/>
              <!-- 此时的property是双标签-->
              <property name="book">
                   <!-- 内部bean-->
                  <bean id="book" class="io.zhangjia.entity.Book">
                      <property name="bookId" value="2"/>
                      <property name="name" value="Spring开发"/>
                      <property name="price" value="19.9"/>
                      <property name="author" value="张三"/>
                  </bean>
              </property>
          </bean>
      </beans>

      测试类输出:

      person2 = Person{name='王五', age=21, book=Book{bookId=2, name='Spring开发', author='张三', price=19.9}}

      值得注意的是,内部bean不能再被其他bean引用

      二.  List

      我们将Person类修改为:

      public class Person {
          private String name;
          private Integer age;
          private List<Book> books;
      
         .....
      }

      和上面的Book实体类一样,Person类中类型为 List<Book> 的books也不能直接使用value赋值,我们需要借助ref标签来为其赋值

      <?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="book" class="io.zhangjia.entity.Book">
              <property name="bookId" value="2"/>
              <property name="name" value="Spring开发"/>
              <property name="price" value="19.9"/>
              <property name="author" value="张三"/>
          </bean>
      
      
          <bean id="book2" class="io.zhangjia.entity.Book">
              <constructor-arg name="bookId" value="1"/>
              <constructor-arg name="name" value="Spring实战"/>
              <constructor-arg name="price" value="29.9"/>
              <constructor-arg name="author" value="王五"/>
          </bean>
         
          <bean id="person" class="io.zhangjia.entity.Person">
              <property name="name" value="张三"/>
              <property name="age" value="20"/>
              <property name="books">
                  <list>
                      <ref bean="book"/>
                      <ref bean="book2"/>
                  </list>
              </property>
      
          </bean>
      </beans>

      测试类输出:

      person = Person{name='张三', age=20, books=[Book{bookId=2, name='Spring开发', author='张三', price=19.9}, Book{bookId=1, name='Spring实战', author='王五', price=29.9}]}

      除了上述方式,我们同样可以采用内部bean的方式为其赋值:

      <?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="person2" class="io.zhangjia.entity.Person">
              <property name="name" value="张三"/>
              <property name="age" value="20"/>
              <property name="books">
                  <list>
                      <bean  class="io.zhangjia.entity.Book">
                          <property name="bookId" value="2"/>
                          <property name="name" value="Spring开发"/>
                          <property name="price" value="19.9"/>
                          <property name="author" value="张三"/>
                      </bean>
                      <bean  class="io.zhangjia.entity.Book">
                          <constructor-arg name="bookId" value="1"/>
                          <constructor-arg name="name" value="Spring实战"/>
                          <constructor-arg name="price" value="29.9"/>
                          <constructor-arg name="author" value="王五"/>
                      </bean>
                  </list>
              </property>
      
          </bean>
      </beans>

      测试类输出:

      person2 = Person{name='张三', age=20, books=[Book{bookId=2, name='Spring开发', author='张三', price=19.9}, Book{bookId=1, name='Spring实战', author='王五', price=29.9}]}

      三.  Set

      Set和上面的List几乎完全一样,这里只给出相关代码,不再赘述:

      Person类:

      public class Person {
          private String name;
          private Integer age;
          private Set<Book> books;
          ....
      }

      方法一:

      <?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="book" class="io.zhangjia.entity.Book">
              <property name="bookId" value="2"/>
              <property name="name" value="Spring开发"/>
              <property name="price" value="19.9"/>
              <property name="author" value="张三"/>
          </bean>
      
      
          <bean id="book2" class="io.zhangjia.entity.Book">
              <constructor-arg name="bookId" value="1"/>
              <constructor-arg name="name" value="Spring实战"/>
              <constructor-arg name="price" value="29.9"/>
              <constructor-arg name="author" value="王五"/>
          </bean>
          
      
          <bean id="person" class="io.zhangjia.entity.Person">
              <property name="name" value="张三"/>
              <property name="age" value="20"/>
              <property name="books">
                  <set>
                      <ref bean="book"/>
                      <ref bean="book2"/>
                  </set>
              </property>
          </bean>
      
      
      </beans>

      测试类输出:

      person = Person{name='张三', age=20, books=[Book{bookId=2, name='Spring开发', author='张三', price=19.9}, Book{bookId=1, name='Spring实战', author='王五', price=29.9}]}

      方法二:

      <?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="person2" class="io.zhangjia.entity.Person">
              <property name="name" value="张三"/>
              <property name="age" value="20"/>
              <property name="books">
                  <set>
                      <bean class="io.zhangjia.entity.Book">
                          <property name="bookId" value="2"/>
                          <property name="name" value="Spring开发"/>
                          <property name="price" value="19.9"/>
                          <property name="author" value="张三"/>
                      </bean>
                      <bean class="io.zhangjia.entity.Book">
                          <constructor-arg name="bookId" value="1"/>
                          <constructor-arg name="name" value="Spring实战"/>
                          <constructor-arg name="price" value="29.9"/>
                          <constructor-arg name="author" value="王五"/>
                      </bean>
                  </set>
              </property>
          </bean>
      
      </beans>

      测试类输出:

      person2 = Person{name='张三', age=20, books=[Book{bookId=2, name='Spring开发', author='张三', price=19.9}, Book{bookId=1, name='Spring实战', author='王五', price=29.9}]}

      三.  Map

      Map和List以及Set稍有不同,map标签中不再使用ref标签,而使用entry标签,其中key就是Map的key,value就是map的value

      实体类:

      public class Person {
          private String name;
          private Integer age;
          private Map<String,Object> books;
          ....
      }

      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="person" class="io.zhangjia.entity.Person">
              <property name="name" value="张三"/>
              <property name="age" value="20"/>
              <property name="books">
                  <map>
                      <entry key="bookId" value="3" />
                      <entry key="name" value="css开发" />
                      <entry key="price" value="10" />
                      <entry key="author" value="李四" />
                  </map>
              </property>
      
          </bean>
      </beans>

      测试类输出:

      person = Person{name='张三', age=20, books={bookId=3, name=css开发, price=10, author=李四}}

      四.  Properties

      实体类:

      public class Person {
          private String name;
          private Integer age;
          private Properties jdbcProperties;
          ....
      }

      Properties类继承了Hashtable,所以也可以将其看做一个map,其中prop标签中的key便是map的key,而prop标签的内容,便是map的value。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="person" class="io.zhangjia.entity.Person">
          <property name="name" value="张三"/>
          <property name="age" value="20"/>
          <property name="jdbcProperties">
              <props>
                  <prop key="jdbc.driver">com.mysql.jdbc.Driver</prop>
                  <prop key="jdbc.ur1">jdbc:mysql://localhost:3306/demo</prop>
                  <prop key="jdbc.username">root</prop>
                  <prop key="jdbc.password">zhangjia</prop>
              </props>
          </property>
          </bean>
      
      </beans>

      测试类输出:

      person = Person{name='张三', age=20, jdbcProperties={jdbc.username=root, jdbc.ur1=jdbc:mysql://localhost:3306/demo, jdbc.driver=com.mysql.jdbc.Driver, jdbc.password=zhangjia}}

    • 0
    • 0
    • 0
    • 409
    • 请登录之后再进行评论

      登录
    • 做任务
    • 实时动态
    • 偏好设置
    • 返回顶部
    • 单栏布局 侧栏位置: