zoukankan      html  css  js  c++  java
  • 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的实例化已经完成。

  • 相关阅读:
    linux学习笔记(十四)
    linux学习笔记(十三)
    linux学习笔记(十二)
    linux学习笔记(十一)
    linux学习笔记(十)
    linux学习笔记(九)
    linux学习笔记(八)
    linux学习笔记(七)
    linux学习笔记(六)
    linux学习笔记(五)
  • 原文地址:https://www.cnblogs.com/LCH-7/p/8235567.html
Copyright © 2011-2022 走看看