Spring学习(4)IOC容器配置bean:定义与实例化

一.  IOC容器配置

  1. 一些概念

  (1)IOC容器

  定义:具有管理对象和管理对象之间的依赖关系的容器。

  作用:应用程序无需自己创建对象,对象由IOC容器创建并组装。BeanFactory是IOC容器的核心。

  流程:IOC容器根据配置文件,读取配置元数据,通过元数据库对程序中的各个对象进行实例化和装配。Spring与配置文件完全解耦,可以使用其他任何方式进行配置元数据,比如注解、基于java文件、基于属性文件的配置都可以。

  

  (2)Bean:IOC容器管理的应用程序的对象我们称它为bean。

  (3)IOC容器核心接口:org.springframework.beans.BeanFactory、org.springframework.context.ApplicationContext

  BeanFactory提供了IOC容器的最基本功能,ApplicationContext是BeanFactory的扩展,添加了更多的企业级功能的支持。

  XmlBeanFactory:BeanFactory的实现,可以从classpath或者文件系统获取资源,在Spring 4.0中已经不建议使用,直接使用applicationContext的实现类。

  ClassPathXmlApplicationContext、FileSystemXmlApplicationContext是ApplicationContext的实现,分别为从classpath、文件系统获取配置文件。

  例子:

        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml");

  

  2. Bean的配置

  (1)Spring IOC容器的目的就是管理bean,这些bean将根据配置文件中bean的定义进行创建,bean定义在容器内部由BeanDefintion对象表示,主要包含以下信息:

  ●全限定类名(FQN):用于定义Bean的实现类;(通过构造器和静态工厂方法进行实例化,必需属性。)

  ●Bean行为定义:这些定义了Bean在容器中的行为;包括作用域(单例、原型创建)、是否惰性初始化及生命周期等;

  ●Bean创建方式定义:说明是通过构造器还是工厂方法创建Bean;

  ●Bean之间关系定义:即对其他bean的引用,也就是依赖关系定义,这些引用bean也可以称之为同事bean 或依赖bean,也就是依赖注入。

  (2)Bean的命名:

    <!-- 指定id,id在IOC容器中唯一-->
    <bean id="helloServiceById" class="self.springmvc.beanConfig.service.impl.HelloServiceByIdImpl"/>

    <!-- 不指定id,只配置必须的全限定类名:用于定义Bean的实现类,由IoC容器为其生成一个标识 -->
    <bean class="self.springmvc.beanConfig.service.impl.HelloServiceByTypeImpl"/>

    <!-- 指定name,name在IOC容器中唯一-->
    <bean name="helloServiceByName" class="self.springmvc.beanConfig.service.impl.HelloServiceByNameImpl"/>

    <!-- 指定id和name,那么id在IOC容器中唯一,name作为别名,IOC会消除name和id的冲突。-->
    <bean name="helloServiceByIdName2" id="helloServiceByIdName2" class="self.springmvc.beanConfig.service.impl.HelloServiceByIdNameImpl"/>
      <!-- 多个别名-->
    <bean name="helloServiceByIdName,helloServiceByIdName1,helloServiceByIdName2,helloServiceByIdName3" id="helloServiceByIdName" class="self.springmvc.beanConfig.service.impl.HelloServiceByIdNameImpl"/>
      <!-- 定义别名-->
    <alias name="helloServiceByIdName" alias="helloServiceByIdName4"></alias>
    <alias name="helloServiceByIdName" alias="helloServiceByIdName5"></alias>

  (3)Bean的实例化

  实例化:使用构造器(无参构造器和参数构造器)、静态工厂方法、实例工厂方法。

 <!-- 无参构造函数实例化,如果注释掉该实现类的无参构造函数,那么就会编译报错。 -->
    <bean id="bIHelloService1" class="self.springmvc.beanInstantiaton.service.impl.HelloServiceImpl"/>
    <!-- 参数构造函数实例化 -->
    <bean id="bIHelloService2" class="self.springmvc.beanInstantiaton.service.impl.HelloServiceImpl">
        <constructor-arg index="0" value="Welcome to XiaMen"/>
    </bean>
    <!-- 使用静态工厂方法实例化 -->
    <bean id="bIHelloService3" class="self.springmvc.beanInstantiaton.service.HelloServiceStaticFactory" factory-method="getBean"/>
    <bean id="bIHelloService4" class="self.springmvc.beanInstantiaton.service.HelloServiceStaticFactory" factory-method="getBean">
        <constructor-arg index="0" value="Welcome to XiaMen4"/>
    </bean>
    <!-- 使用实例工厂方法实例化-->
    <!-- 定义实例工厂Bean-->
    <bean id="helloServiceFactoryBean" class="self.springmvc.beanInstantiaton.service.HelloServiceFactory"/>
    <!-- 使用实例工厂Bean实例化Bean-->
    <bean id="bIHelloService5" factory-bean="helloServiceFactoryBean" factory-method="getBean"/>
    <bean id="bIHelloService6" factory-bean="helloServiceFactoryBean" factory-method="getBean">
        <constructor-arg index="0" value="Welcome to XiaMen5"/>
    </bean>

  静态工厂类与实例工厂类:

package self.springmvc.beanInstantiaton.service;

import self.springmvc.beanInstantiaton.service.impl.HelloServiceImpl;
import self.springmvc.beanInstantiaton.service.inter.HelloService;

/**
 * Description
 */
public class HelloServiceStaticFactory {
    public static HelloService getBean(){
        return new HelloServiceImpl();
    }
    public static HelloService getBean(String msg){
        return new HelloServiceImpl(msg);
    }
}

package self.springmvc.beanInstantiaton.service;

import self.springmvc.beanInstantiaton.service.impl.HelloServiceImpl;
import self.springmvc.beanInstantiaton.service.inter.HelloService;

/**
 * Description
 */
public class HelloServiceFactory {
    public  HelloService getBean(){
        return new HelloServiceImpl();
    }
    public  HelloService getBean(String msg){
        return new HelloServiceImpl(msg);
    }
}

  

    

原文地址:https://www.cnblogs.com/knsbyoo/p/9217324.html

时间: 2024-10-03 04:06:14

Spring学习(4)IOC容器配置bean:定义与实例化的相关文章

[spring学习1] IoC容器

简介 一般java程序会有很多个类,类的声明赋值等都需要自己手动操作,比较繁琐.Bean是一个规范,它也是一个普通的java类,人们希望像写出的程序松耦合,每个类实现自己的功能即可,Bean就类似于一个一个的零件,程序由许多的Bean拼装而成. 很多类,我们常重复使用到,但初始化并赋值等操作都是重复的,在业务代码中还要想办法去找个地方去做它. 通过spring框架,配置好的bean,ioc容器会自动帮你new出来,并赋好值,自动管理bean的生命周期.我们仅仅只在需要使用的地方声明,ioc容器会

Spring学习之IOC容器1

在Spring IOC容器的设计中,有两个主要的容器系列,一个是实现BeanFactory接口的简单容器系列,这系列容器只实现了容器的最基本功能:另一个是ApplicationContext应用上下文,它作为容器的高级形态而存在.应用上下文在简单容器的基础上,增加了许多面向框架的特性,同时对应用环境做了许多适配. 用户在使用容器时,可以使用转义符“&”来得到FactoryBean本身,用来区分通过容器来获得FactoryBean产生的对象和获取FactoryBean本身.例如,如果MyBean是

Spring学习-2-Spring IOC容器

作用:创建对象 & 处理对象依赖关系 容器创建对象的方式 1)调用无参数构造器 <bean id="user" class="com.cx.createObj.User"></bean> 2)带参数构造器 <bean id="user" class="com.cx.createObj.User"> <constructor-arg index="0" typ

[原创]java WEB学习笔记101:Spring学习---Spring Bean配置:IOC容器中bean的声明周期,Bean 后置处理器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Spring框架—— IOC容器和Bean的配置

 1 IOC和DI ①IOC(Inversion of Control):反转控制. 在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率. 反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向--改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效

JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring? Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架. 所谓分层: SUN提供的EE的三层结构:web层.业务层.数据访问层(也称持久层,集成层). Struts2是web层基于MVC设计模式框架. Hibernate是持久的一个ORM的框架. 所谓一站式:Spring框架有对三层的每层解决方案.

跟着刚哥学习Spring框架--通过XML方式配置Bean(三)

Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式   √ id:标识容器中的bean.id唯一. √ class:bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须有无参的构造器 2.依赖注入的方式 1)属性注入:通过setter方法注入Bean的属性值或依赖的对象 属性注入使用<Property>元素,使用name指定Bean的属性名称,使用value指定Bean的属

【Spring源码--IOC容器的实现】(五)Bean对象的创建

前言: 1.第一次直接用CSDN原生的编辑器写博客,格式排版还有点陌生,见谅. 2.前面的文章我们写了IOC容器的启动,也就是把xml里面的配置都解析成Spring的内部结构BeanDefinition,并存储在Spring的容器中.下面我们将分析IOC容器室怎样对bean的依赖关系进行注入的.依赖注入的过程是第一次向IOC容器索要bean时触发的(例外:lazy-init实现bean的预实例化),也就是getBean方法. 3.依赖注入可以分为两个过程,一是bean所包含的Java对象的创建,

Spring核心技术(一)——IoC容器和Bean简介

IoC容器和Bean简介 这章包括了Spring框架对于IoC规则的实现.Ioc也同DI(依赖注入).而对象是通过构造函数,工厂方法,或者一些Set方法来定义对象之间的依赖的.容器在创建这些Bean对象的时候同时就会注入这些依赖.这个过程是根本上的反转了,不再由Bean本身来控制实例化和定位依赖,而是通过服务定位来控制这个过程,也是IoC(控制反转)的由来. org.springframework.beans和org.springframework.context包是Spring框架IoC容器的