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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值