1. 程式人生 > >Spring配置——Bean元素以及生成Bean元素的三種方式

Spring配置——Bean元素以及生成Bean元素的三種方式

  • Bean元素:使用該元素描述需要Spring容器管理的物件

    • class屬性:被管理物件的完整類名。
    • name屬性:給被管理的物件起的名字,獲得物件時根據該name獲取物件。(儘量使用)
    • id屬性:功能與name屬性一樣,但是不能重複且不能使用特殊字元。(原始)
  • Spring生成Bean的三種方式

    1. 空參構造建立

      通過建立顯式空參構造器,驗證通過空參構造建立
      User.java
      package cn.jjs.bean;
      
      public class User {
       public User() {
           System.out.println("User空參構造器");
       }
      
       private
      String name; private int age; 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; } }
      Demo.java
      package cn.jjs.helloSpring;
      
      import cn.jjs.bean.User;
      import
      org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Demo { @Test public void Test1() { //1. 建立容器物件 ApplicationContext ac = new ClassPathXmlApplicationContext("cn/jjs/b_create/applicationContext.xml"
      ); //2. 向容器"要"user物件 User u = (User) ac.getBean("user"); //3. 列印物件 System.out.println(u); } }
      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-3.0.xsd">
      
      <!--name可以隨意取名, 一般見名知意-->
       <bean name="user" class="cn.jjs.bean.User"></bean>
      </beans>

      結果:

      User空參構造器
      cn.jjs.bean.User@21ed510d
    2. 靜態工廠方式

      呼叫UserFactory的createUser方法建立名為user1的物件。放入容器。

      User.java
      package cn.jjs.bean;
      
      public class User {
       public User() {
           System.out.println("User空參構造器");
       }
      
       private String name;
       private int age;
      
       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;
       }
      }
      UserFactory.java
      package cn.jjs.b_create;
      
      import cn.jjs.bean.User;
      
      public class UserFactory {
       public static User createUser() {
           System.out.println("靜態工廠建立User");
           return new User();
       }
      }
      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-3.0.xsd">
      
      <!--name可以隨意取名, 一般見名知意-->
       <bean name="user1" class="cn.jjs.b_create.UserFactory" factory-method="createUser"></bean>
      </beans>
      Demo.java
      package cn.jjs.helloSpring;
      
      import cn.jjs.bean.User;
      import org.junit.Test;
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      public class Demo {
       @Test
       public void Test() {
           //1. 建立容器物件
           ApplicationContext ac = new ClassPathXmlApplicationContext("cn/jjs/b_create/applicationContext.xml");
           //2. 向容器"要"user物件
           User u = (User) ac.getBean("user1");
           //3. 列印物件
           System.out.println(u);
      
       }
      
       @Test
       public void Test1() {
           //1. 建立容器物件
           ApplicationContext ac = new ClassPathXmlApplicationContext("cn/jjs/bean/applicationContext.xml");
           //2. 向容器"要"user物件
           User u = (User) ac.getBean("user");
           //3. 列印物件
           System.out.println(u);
      
       }
      }

      結果:

      靜態工廠建立User
      User空參構造器
      cn.jjs.bean.User@17d8986
    3. 例項工廠方式

      呼叫UserFactory物件的createUser1方法,建立名為user2的物件,放入容器。

      UserFactory.java
      package cn.jjs.b_create;
      
      import cn.jjs.bean.User;
      
      public class UserFactory {
       public User createUser1() {
           System.out.println("例項工廠建立User");
           return new User();
       }
      }
      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-3.0.xsd">
      
       <bean name="user2"
           factory-bean="userFactory"
           factory-method="createUser1"></bean>
       <bean name="userFactory"
             class="cn.jjs.b_create.UserFactory"></bean>
      </beans>
      Demo.java
      package cn.jjs.helloSpring;
      
      import cn.jjs.bean.User;
      import org.junit.Test;
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      public class Demo {
       @Test
       public void Test2() {
           //1. 建立容器物件
           ApplicationContext ac = new ClassPathXmlApplicationContext("cn/jjs/b_create/applicationContext.xml");
           //2. 向容器"要"user物件
           User u = (User) ac.getBean("user2");
           //3. 列印物件
           System.out.println(u);
      
       }
      }
      
  • Bean元素的scope屬性

    singleton

    預設值,單例物件,被標記為單例的物件在Spring容器中之會有一個例項。

    prototype

    多例原型,被標記為多例的物件,每次獲得時才會在容器中建立,每次建立都是新的物件。

    request

    web環境下,物件與request請求生命週期一致。

    session

    web環境下,物件與session生命週期一致。