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
      
      <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="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
      
      <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="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
      
      <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生命周期一致。

你可能感兴趣的:(Spring)