[spring学习1] IoC容器

简介

一般java程序会有很多个类,类的声明赋值等都需要自己手动操作,比较繁琐。Bean是一个规范,它也是一个普通的java类,人们希望像写出的程序松耦合,每个类实现自己的功能即可,Bean就类似于一个一个的零件,程序由许多的Bean拼装而成。

很多类,我们常重复使用到,但初始化并赋值等操作都是重复的,在业务代码中还要想办法去找个地方去做它。

通过spring框架,配置好的bean,ioc容器会自动帮你new出来,并赋好值,自动管理bean的生命周期。我们仅仅只在需要使用的地方声明,ioc容器会自动帮你把一切的配置都做好。

Bean

创建Bean

bean就是普通的java类,由成员变量和其对应的setter和getter方法组成。

package com.yww;

public class Message {
    private String msg;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = "this mssage is : " + msg;
    }

}

Bean 生命周期

实例化 -> 填充属性 -> 调用BeanNameAware的setBean()方法 -> 调用BeanFactoryAware的setBeanFactory()方法 -> 调用ApplicationContextAware的setApplication()方法 -> 

调用BeanPostProcessor的预初始化方法 -> 调用InitializingBean的afterPropertiesSet()方法 ->

调用自定义的初始化方法 -> 

调用BeanPostProcessor的初始化方法 -> 

使用Bean ->

(容器关闭)

调用DisposableBean的destroy()方法 ->

调用自定义的销毁方法

大概流程就是,bean的实例化,赋值,(传入实例到容器),(调用自定义方法),使用,容器关闭,(调用自定义销毁方法)。

括号中的是需要bean实现对应接口后,可以实现附加的操作。

Bean 作用域

可以在配置文件中设置bean的scope作用范围。

可选值:singleton(单例),prototype(每次都新建),request(每次全球都新建),session(每个会话共享),global-session(用于Protlet).

Bean 定义继承

bean可以指定parent指定另一个bean的id后,使其继承。

尽管在java文件中没有继承,但可在配置文件中实现继承效果,子类可以或其父类的成员。但子类需要有父类的哪个成员。

Bean PostProcessor

Bean通过继承BeanPostProcessor接口,可以让我们在Bean的初始化和销毁时做一些自定义的操作。

IoC容器

spring容器负责创建对象,装配它们,配置它们,管理它们的整个生命周期。

spring自带了多个容器的实现,分为2类。

  • bean工厂(org.springframework.beans.factory.beanFactory)是最简单的容器,提供最基本的DI支持。
  • 应用上下文(org.springframework.context.ApplicationContext)基于BeanFactory创建,提供应用框架级别的服务。(如从属性文件解析文本信息以及发布应用事件给感兴趣的事件监听器)

Spring BeanFactory容器

BeanFactory需要借助其它对象找到.xml文件。

// ...
XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));
Message msg = (Message)factory.getBean("messge1");
// ...

ClassPathsrc/路径下。

Spring ApplicationContext容器

spring有多种类型的应用上下文,如:

  • AnnotationConfigApplicationContext:从基于java的配置类中加载spring应用上下文。
  • AnnotationConfigWebApplicationContext:从基于java的配置类中加载spring web应用上下文。
  • ClassPathXmlApplicationContext:从类路径下的xml配置文件中加载上下文。
  • FileSystemXmlapplicationContext:从文件系统下的xml配置文件中加载上下文。
  • XmlWebApplicationContext:从Web应用下的xml配置文件中加载上下文。
// ...
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
ApplicationContext context = new FileSystemXmlApplicationContext("/home/yww/beans.xml");
ApplicationContext context = new AnnotationConfigApplicationContext(MessageConfig.class);

Message msg = (Message)context.getBean("messge1");
// ...

示例的这几个应用上下文,应在App中使用,而非web中。

AnnotationConfigWebApplicationContext可以配置在web.xml<context-param>中,让ContextLoaderListener使用AnnotationConfigWebApplicationContext代替XmlWebApplicationContext

原文地址:https://www.cnblogs.com/maplesnow/p/11620259.html

时间: 2024-10-14 23:24:44

[spring学习1] 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

Spring学习之Ioc控制反转(1)

开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------------------------------开始啦啦啦啦啦------------------------------------------------------------------------------- 从开始接触spring起,听到最多的就是Ioc(控制反转)和AOP(面向切面编程

Spring学习之Ioc控制反转(2)

开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------------------------------开始啦啦啦啦啦------------------------------------------------------------------------------- 上一篇博文简单的演示了如何用Spring框架创建bean,注入bean,并使用到

Spring 总览及 IOC 容器的使用 —— Spring 官方文档解读(一)

Spring 总览及 IOC 容器的使用 -- Spring 官方文档解读(一) 什么是 Spring? spring 这个词在不同情况下有不同意义.可以指 Spring 框架本身,但更多地被用来表示 Spring 整个家族的产品. 设计理念 学习框架必须要知道它的设计理念,Spring 框架有着以下的理念: Spring 让你在架构种的各个层面有更多的选择,并且允许你尽晚的做出决策.比如,你在项目完成后可以通过更改配置来切换持久层的提供者. Spring 具有强大的灵活性,它不在意你是如何完成

使用Spring.NET的IoC容器

使用Spring.NET的IoC容器 0. 辅助类库 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SpringDemo.Pub { public static class Pub { public static string ServiceNameA = "SpringDemo.Lib.Oracle.OracleDatabase"; pub

Spring技术内幕——Spring Framework的IOC容器实现(一)

一.SpringIOC容器概述 IOC容器和依赖反转的模式 在面向对象的系统中,对象封装了数据和对数据的处理,对象的依赖关系常常体现在对数据和方法的依赖上.这些依赖关系可以通过把对象的依赖注入交给框架IOC容器来完成.他可以再解耦代码的同时提高了代码的可测试性. 依赖控制反转的实现由很多种方式,在Spring中,IOC容器是实现这个模式的载体,他可以再对象生成或者初始化时直接将数据注入到对象中,也可以通过将对象引用注入到对象数据域中的方式来注入对方法调用的依赖.这种依赖注入是可以递归的,对象被逐

比Spring简单的IoC容器

比Spring简单的IoC容器 Spring 虽然比起EJB轻量了许多,但是因为它需要兼容许多不同的类库,导致现在Spring还是相当的庞大的,动不动就上40MB的jar包, 而且想要理解Spring的内部运行机制,阅读它的代码非常重要, 但是往往它的代码非常的"多". 现在根据Spring对Bean的生命周期的处理, 编写出一款非常小的IoC容器, 没有了对XML的解析,而是通过对Config对象的构造而完成IoC配置文件的声明, 相比较XML的方式, 对重构软件非常具有好处, 并且

看完这篇你还敢说,不懂Spring中的IoC容器?

一. 什么是IoC 什么是耦合和内聚 耦合指的就是模块之间的依赖关系.模块间的依赖越多,则表示耦合度越高,相应的维护成本就越高.内聚指的是模块内功能之间的联系.模块内功能的联系越紧密,则表示内聚度越高,模块的职责也就越单一.所以在程序开发中应该尽量的降低耦合,提高内聚.也就是设计原则中的开闭原则和单一职责原则. 工厂模式 工厂模式就是用来解决程序间耦合的一种设计模式.可以把所有要创建的对象放在工厂的一个集合里,当需要使用这个对象的时候,直接从工厂里面取出来用就行. 工厂模式的优点: 一个调用者想