Spring ioc基础内容

1 BeanFactory与ApplicationContext区别

BeanFactory是Spring框架中IoC容器的顶层接?,它只是?来定义?些基础功能,定义?些基础规范,?ApplicationContext是它的?个?接?,所以ApplicationContext是具备BeanFactory提供的全部功能的。
通常,我们称BeanFactory为SpringIOC的基础容器,ApplicationContext是容器的?级接?,?BeanFactory要拥有更多的功能,?如说国际化?持和资源访问(xml,java配置类)等等

        启动 IoC 容器的?式:

        * Java环境下启动IoC容器
            ①ClassPathXmlApplicationContext:从类的根路径下加载配置?件(推荐使?)
            ②FileSystemXmlApplicationContext:从磁盘路径上加载配置?件
            ③AnnotationConfigApplicationContext:纯注解模式下启动Spring容器

        * Web环境下启动IoC容器
            ①从xml启动容器
                                <!DOCTYPE web-app PUBLIC
                        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
                        "http://java.sun.com/dtd/web-app_2_3.dtd" >
                        <web-app>
                        <display-name>Archetype Created Web Application</display-name>
                        <!--配置Spring ioc容器的配置?件-->
                        <context-param>
                        <param-name>contextConfigLocation</param-name>
                        <param-value>classpath:applicationContext.xml</param-value>
                        </context-param>
                        <!--使?监听器启动Spring的IOC容器-->
                        <listener>
                        <listener-
                        class>org.springframework.web.context.ContextLoaderListener</listener-
                        class>
                        </listener>
                        </web-app>

                ②从配置类启动容器
                                             <!DOCTYPE web-app PUBLIC
                        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
                        "http://java.sun.com/dtd/web-app_2_3.dtd" >
                        <web-app>
                        <display-name>Archetype Created Web Application</display-name>
                        <!--告诉ContextloaderListener知道我们使?注解的?式启动ioc容器-->
                        <context-param>
                        <param-name>contextClass</param-name>
                        <param-
                        value>org.springframework.web.context.support.AnnotationConfigWebAppli
                        cationContext</param-value>
                        </context-param>
                        <!--配置启动类的全限定类名-->
                        <context-param>
                        <param-name>contextConfigLocation</param-name>
                        <param-value>com.lagou.edu.SpringConfig</param-value>
                        </context-param>
                        <!--使?监听器启动Spring的IOC容器-->
                        <listener>
                        <listener-
                        class>org.springframework.web.context.ContextLoaderListener</listener-
                        class>
                        </listener>
                        </web-app>

2 纯xml模式
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
https://www.springframework.org/schema/beans/spring-beans.xsd"&gt;

            实例化Bean的三种?式
            ?式?:使??参构造函数
            在默认情况下,它会通过反射调??参构造函数来创建对象。如果类中没有?参构造函数,将创建失败。

            ?式?:使?静态?法创建
            在实际开发中,我们使?的对象有些时候并不是直接通过构造函数就可以创建出来的,它可能在创建的过程 中会做很多额外的操作。此时会提供?个创建对象的?法,恰好这个?法是static修饰的?法,即是此种情 况。
            例如,我们在做Jdbc操作时,会?到java.sql.Connection接?的实现类,如果是mysql数据库,那么?的就 是JDBC4Connection,但是我们不会去写 JDBC4Connection connection = new JDBC4Connection() ,因 为我们要注册驱动,还要提供URL和凭证信息,? DriverManager.getConnection ?法来获取连接。

           ?式三:使?实例化?法创建
此种?式和上?静态?法创建其实类似,区别是?于获取对象的?法不再是static修饰的了,?是类中的? 个普通?法。此种?式?静态?法创建的使??率要??些。
在早期开发的项?中,??类中的?法有可能是静态的,也有可能是?静态?法,当是?静态?法时,即可 采?下?的配置?式:
            <!--使?实例?法创建对象的配置?式-->
        <bean id="beanFactory"
        class="com.lagou.factory.instancemethod.BeanFactory"></bean>
        <bean id="transferService" factory-bean="beanFactory" factory-
        method="getTransferService"></bean>

3.Bean的X及?命周期
作?范围的改变
在spring框架管理Bean对象的创建时,Bean对象默认都是单例的,但是它?持配置的?式改
变作?范围。作?范围官?提供的说明如下图:

    在上图中提供的这些选项中,我们实际开发中?到最多的作?范围就是singleton(单例模式)和prototype(原型模式,也叫多例模式)。配置?式参考下?的代码:
        <!--使?静态?法创建对象的配置?式-->
        <bean id="userService" class="com.lagou.factory.BeanFactory"
        factory-method="getTransferService"></bean>
        <!--使?实例?法创建对象的配置?式-->
        <bean id="beanFactory"
        class="com.lagou.factory.instancemethod.BeanFactory"></bean>
        <bean id="transferService" factory-bean="beanFactory" factory-
        method="getTransferService"></bean>
        <!--配置service对象-->
        <bean id="transferService"
        class="com.lagou.service.impl.TransferServiceImpl" scope="singleton">
        </bean>

不同作?范围的?命周期
单例模式:singleton
对象出?:当创建容器时,对象就被创建了。
对象活着:只要容器在,对象?直活着。
对象死亡:当销毁容器时,对象就被销毁了。
?句话总结:单例模式的bean对象?命周期与容器相同。
多例模式:prototype
对象出?:当使?对象时,创建新的对象实例。
对象活着:只要对象在使?中,就?直活着。
对象死亡:当对象?时间不?时,被java的垃圾回收器回收了。
?句话总结:多例模式的bean对象,spring框架只负责创建,不负责销毁。

Bean标签属性
在基于xml的IoC配置中,bean标签是最基础的标签。它表示了IoC容器中的?个对象。换句话说,如果?个对象想让spring管理,在XML的配置中都需要使?此标签配置,Bean标签的属性如下:
id属性: ?于给bean提供?个唯?标识。在?个标签内部,标识必须唯?。
class属性:?于指定创建Bean对象的全限定类名。
name属性:?于给bean提供?个或多个名称。多个名称?空格分隔。
factory-bean属性:?于指定创建当前bean对象的??bean的唯?标识。当指定了此属性之后,class属性失效。
factory-method属性:?于指定创建当前bean对象的???法,如配合factory-bean属性使?,则class属性失效。如配合class属性使?,则?法必须是static的。
scope属性:?于指定bean对象的作?范围。通常情况下就是singleton。当要?到多例模式时,可以配置为prototype。 init-method属性:?于指定bean对象的初始化?法,此?法会在bean对象装配后调?。必须是?个?参?法。
destory-method属性:?于指定bean对象的销毁?法,此?法会在bean对象销毁前执?。它只能为scope是singleton时起作?。

4.DI 依赖注?的xml配置
依赖注?分类

  • 按照注?的?式分类
    构造函数注?:顾名思义,就是利?带参构造函数实现对类成员的数据赋值。
    set?法注?:它是通过类成员的set?法实现数据的注?。(使?最多的)
  • 按照注?的数据类型分类
    基本类型和String
    注?的数据类型是基本类型或者是字符串类型的数据。
    其他Bean类型
    注?的数据类型是对象类型,称为其他Bean的原因是,这个对象是要求出现在IoC容器
    中的。那么针对当前Bean来说,就是其他Bean了。
    复杂类型(集合类型)
    注?的数据类型是Aarry,List,Set,Map,Properties中的?种类型。

依赖注?的配置实现之构造函数注? 顾名思义,就是利?构造函数实现对类成员的赋值。它的使?要求是,类中提供的构造函数参数个数必须和配置的参数个数?致,且数据类型匹配。同时需要注意的是,当没有?参构造时,则必须提供构造函数参数的注?,否则Spring框架会报错。

原文地址:https://blog.51cto.com/13225344/2473820

时间: 2024-11-02 16:02:47

Spring ioc基础内容的相关文章

浅析 Spring IoC - 基础概念

1. IoC是什么? IoC(Inversion of Control)即控制反转,不是什么技术,而是一种设计思想.在Java开发中,IoC 意味着将你设计好的对象交给容器去控制,而不是传统的在对象内部直接控制(比如说 new 一个对象).理解好 IoC 的关键是要明确"谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了": 谁控制谁,控制什么:传统Java SE 程序设计,我们直接在对象内部通过 new 创建对象,是程序主动去创建依赖对象:而 IoC 是由 IoC

[spring] Ioc 基础

Ioc的理解:调用类对某一接口的实现类的依赖关系又第三方注入,以移除调用类对接口实现类的依赖.又叫做依赖注入.调用者对接口的选择权利被剥夺,交给了第三方.举个例子,学生本来可以选择哪个老师给他上课的,但是这个权利被学校剥夺了,由学校分配学生的老师是谁. Ioc的类型: 构造函数:将依赖的对象通过构造函数注入.第三方将需要的对象准备好,在创建对象时通过构造函数传参注入所需对象 属性:声明依赖的对象,并提供setter/getter方法.第三方通过set方法注入. 接口:将依赖的对象抽象到接口中,通

Spring IOC基础

2.1.1 IOC是什么IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对 象内部直接控制.如何理解好IOC呢?理解好IOC的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们 来深入分析一下: ●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象:而IOC是有专

Spring IOC基础使用

先下载.导入核心jar包 编写Book类和CollectionUse类 1 package MyPackageOne; 2 3 public class Book { 4 private String title; 5 private double price; 6 7 public Book() { 8 this("", 0.0); 9 } 10 11 public Book(String title, double price) { 12 this.title = title; 1

spring学习——Ioc基础三(Ioc配置使用)

一.XML配置的结构  一般配置文件结构如下: <beans>       <import resource="resource1.xml"/>       <bean id="bean1"class=""></bean>       <bean id="bean2"class=""></bean>   <bean name=&q

Spring Ioc和依赖注入

总结一下近来几天的学习,做个笔记 以下是Spring IoC相关内容: IoC(Inversion of Control):控制反转: 其主要功能可简单概述为:将 用 new 去创建实例对象,转换为让Spring通过配置xml文件去创建实例化 对象. 其实现原理大致为: 配置xml文件,通过解析xml文件,利用工厂模式和Java反射机制,实现对象实例的创建. 这一系列过程只需要我们配置相应的xml文件即可,其他的实现交由Spring容器. DI(Dependency Injection):依赖注

Spring -- IOC/DI 基础概念的理解

Spring -- IOC/DI 基础概念 思维导图: ------------------------------------------------------- IoC/DI 的基本概念 IoC是什么 ? IoC -- Inversion of control, 控制反转   在Java开发中,IoC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则. 理解IoC的关键是明

spring IOC的基础

IOC的基础下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工 作,但对这两个核心模块工作原理和运作机制的理解,对深入理解Spring平台,却是至关重要的:因为,它们同时也是Spring其他模块实现的基础.从 Spring要做到的目标,也就是从简化Java EE开发的出发点来看,简单的来说,它是通过对POJO开发的支持,来具体实现的:具体的说,Spring通过为应用开发提供基于POJO的开发模式,把 应用开发和复

Spring IOC之IOC基础

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/bl