Spring学习总结(二)——容器对Bean的管理

  在上篇总结中,我们已经对Spring容器进行了实例化,从本质上来说,BeanFactory和ApplicationContext仅仅只是一个维护Bean定义以及相关依赖关系的高级工厂接口,通过这两个接口我们可以访问Bean定义,对bean进行相关的管理,下面就来简单叙述下。

  一.Bean的实例化

  首先我们需要在配置文件中添加bean定义:<bean id="标示符 " class="bean类型"></bean>,接着在创建ApplicationContext容器对象后,调用getBean()方法获取Bean的实例即可。接下来就通过实例来进行Bean定义的实例化。

  在Spring容器中创建Bean对象的方法主要有三种:

    ①用构造器来实例化

      利用Spring调用构造器 GregorianCalendar 创建 Calendar实例:

1 <!-- 使用构造器进行Bean的实例化 -->
2 <!-- bean标记中id属性calendar1用于定义bean名字, 是程序代码中获得Spring管理bean对象的标识,这个名字不能重复,class 
3 用于指定创建对象的类GregorianCalendar,Spring会自动的调用GregorianCalendar类的默认构造器创建bean对象实例-->
4 <bean id="calendar1" class="java.util.GregorianCalendar"></bean>

    ②使用静态工厂方法实例化   

1 <!-- 使用静态方法实例化 -->
2 <!-- bean标记中id属性calendar2用于定义bean名字,class属性用于指定创建对象的工厂类Calendar,factory-method属性用于指定创建对
3 象的静态工厂方法getInstance,Spring会自动的调用工厂类Calendar静态工厂方法getInstance创建bean对象实例. -->
4 <bean id="calendar2" class="java.util.Calendar" factory-method="getInstance"></bean>

    ③使用实例工厂实例化

1 <!-- 使用实例工厂方法实例化 -->
2 <!-- 这里定义了两个bean, 其中一个bean calendar3是用于创建 dateObj 对象的实例工厂.另外一个bean标记中id属性dateObj用于定义bean名字,
3 factory-bean属性用于指定创建对象的工厂对象calendar3, 前面定义的一个bean, factory-method属性用于指定创建对象的工厂方法getTime, 
4 Spring会自动的调用工厂类Calendar静态工厂方法getInstance创建bean对象实例. -->
5 <bean id="calendar3" class="java.util.GregorianCalendar"></bean>
6 <bean id="dataObj" factory-bean="calendar3" factory-method="getTime"></bean>

步骤:

  1.配置ApplicationContext.xml文件,增加Bean对象创建声明:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3  <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4 xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
 5 xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
 6 xmlns:jpa="http://www.springframework.org/schema/data/jpa"
 7 xsi:schemaLocation="
 8 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
 9 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
10 http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
11 http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
12 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
13 http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd">
14 
15 <!-- 使用构造器进行Bean的实例化 -->
16 <!-- bean标记中id属性calendar1用于定义bean名字, 是程序代码中获得Spring管理bean对象的标识,这个名字不能重复,class 
17 用于指定创建对象的类GregorianCalendar,Spring会自动的调用GregorianCalendar类的默认构造器创建bean对象实例-->
18 <bean id="calendar1" class="java.util.GregorianCalendar"></bean>
19 <!-- 使用Bean的别名 -->
20 <alias name="calendar1" alias="cale"></alias>
21 
22 <!-- 使用静态方法实例化 -->
23 <!-- bean标记中id属性calendar2用于定义bean名字,class属性用于指定创建对象的工厂类Calendar,factory-method属性用于指定创建对
24 象的静态工厂方法getInstance,Spring会自动的调用工厂类Calendar静态工厂方法getInstance创建bean对象实例. -->
25 <bean id="calendar2" class="java.util.Calendar" factory-method="getInstance"></bean>
26 
27 <!-- 使用实例工厂方法实例化 -->
28 <!-- 这里定义了两个bean, 其中一个bean calendar3是用于创建 dateObj 对象的实例工厂.另外一个bean标记中id属性dateObj用于定义bean名字,
29 factory-bean属性用于指定创建对象的工厂对象calendar3, 前面定义的一个bean, factory-method属性用于指定创建对象的工厂方法getTime, 
30 Spring会自动的调用工厂类Calendar静态工厂方法getInstance创建bean对象实例. -->
31 <bean id="calendar3" class="java.util.GregorianCalendar"></bean>
32 <bean id="dataObj" factory-bean="calendar3" factory-method="getTime"></bean>
33 
34 </beans>
View Code

  2.TestCase中增加测试模块test02:

 1 package com.liu.Test;
 2 
 3 import java.util.Calendar;
 4 import java.util.Date;
 5 import java.util.GregorianCalendar;
 6 
 7 import org.junit.Test;
 8 import org.springframework.context.ApplicationContext;
 9 import org.springframework.context.support.ClassPathXmlApplicationContext;
10 
11 import com.liu.Dao.EggAndRice;
12 
13 public class TestCase {
14     @Test
15     public void test02(){
16         String str = "ApplicationContext.xml";
17         ApplicationContext ac = new ClassPathXmlApplicationContext(str);
18         //使用构造器初始化
19         Calendar gc = (Calendar) ac.getBean("calendar1");
20         //使用Bean的别名
21         Calendar gc1 = (Calendar) ac.getBean("cale");
22         //使用静态工厂方法初始化
23         Calendar ca = (Calendar) ac.getBean("calendar2");
24         //使用动态工厂方法初始化
25         Date date = (Date) ac.getBean("dataObj");
26         System.out.println(gc);
27         System.out.println(gc1);
28         System.out.println(ca);
29         System.out.println(date);
30     }
31 }
View Code

 

  3.运行test02()方法,结果显示如下:

即利用容器进行Bean的实例化已经完成。

 

posted @ 2018-01-08 02:15  做条技术狗  阅读(324)  评论(0编辑  收藏  举报