spring IOC DI LifeCycle

spring IOC

创建javaBean工厂的三种方式:

1.BeanFactory bf = new XmlBeanFactory(new ClassPathResource("bean.xml"));

BeanFactory:spring管理JavaBean的顶级接口,直接用这个接口创建的工厂有延迟加载的作用

常用的有ApplicationContext  ac = new ClassPathXmlAppliactionContext("bean.xml");创建时就加载bean.xml所有的bean.

通常IOC和DI是结合使用

IOC:控制反转,是指不再由程序员去创建类的的实例,而统统交给spring容器去管理类,由容器去创建类的实例,由容器管理类的生命周期

DI:属性注入

原理:IOC是通过java的反射机制去创建类的实例,可以通过类的构造器去为类进行初始化

Class clazz = Class.forName("类的全路径");

Object object = clazz.newInstance();

默认的情况下时调用类的无参构造<bean id="" class =""></bean> 默认的scope是singleton

scope有四个取值范围:

singleton(单例,在容器里只有一个bean的实例对象)

prototype(非单例,每次调用getBean("")都会创建一个新的实例),

request(创建一个bean的实例,放入request域中)

session(创建一个bean的实例,放入session域中)

根据无参构造对javaBean初始化

<bean>

<property name="" value="" ref=""/>

name:属性的名字 value:基本数据类型的属性 ref:应用数据类型的属性,若是集合类型的数据<property>中有list,array,set,map,props类型的子标签

</bean>

根据有参构造方法对bean初始化

<bean>

<construction-arg index="" value="" ref="" type="" name=""/>

index:参数的位置.value:基本数据类型的赋值  ,type数据的类型,  ref:复杂类型的赋值,类型是集合类型时要配合<util>使用   name:形参的名字

</bean>

当用构造方法去初始化类的时候,参数的个数个类型要一一对应,否则报错

Spring的生命周期LifeCycle

  1. instantiate bean对象实例化
  2. populate properties 封装属性
  3. 如果实现了BeanNameWare接口,则为bean设置名字(默认的是取id属性的值,若id属性没有值,则设置name的值)
  4. 如果实现了BeanFactoryWare或者applicationContextWare接口,则为其设置applicationContext
  5. 如果实现了BeanPostProcessor,则会执行BeanPostProcessor的postProcessBeforeInitialization方法,这个方法有两个参数(Object bean,String beanName)这个方法类似与拦截器,要把bean返回,否则会报nullProintException.这个方法是一个全局的参数,一个bean.xml中之所要配置一次,他会管理整个xml文件中所有的bean
  6. 如果Bean实现了InitializingBean他会执行型AfterPropertySet()方法
  7. 执行自定义的init-method方法(需要在bean.xml中配置init-method)一般初始化和销毁都会执行这个方法
  8. 如果实现了BeanPostProcessor(处理Bean),则会执行afterPostProcessor方法
  9. 执行业务方法
  10. 如果实现了DisposableBean接口,执行接口中的destroy方法
  11. 执行destroy-method方法(需要在bean.xml中指定destroy-method方法)

  执行10和11步,需要调用ClassPathXmlApplicationContext中的close方法;

  3-4步是为了为bean设置容器的参数,让bean了解bean

  5,8步是增强bean的功能

  6和10,7和11是初始化和销毁bean 7,11耦合性低,常用7,11而不用6和10;

原文地址:https://www.cnblogs.com/zhaiwei/p/9460700.html

时间: 2024-08-28 03:14:07

spring IOC DI LifeCycle的相关文章

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

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

[Spring系列01]Spring IOC/DI模拟

本文以一个简单的实例大致模拟Spring IOC/DI的运行原理,代码简单分dao,model,service三层.即:dao 与数据库的操作,增删改查等方法model 一般都是javabean对象,例如与数据库的某个表相关联.service 供外部调用,等于对dao,model等进行了包装. 程序结构图如下: 先粘贴部分代码,再进行解释: UserDAO.java package com.ctsh.dao; import com.ctsh.model.User; public interfac

Spring IOC/DI/注解

一.定义:Spring 是一个开源的控制反转(Inversion of Control,IoC/DI)和面向切面(AOP)的容器框架,它的主要目的是简化企业开发 二.实例化Spring容器: 方法一:在类路径下寻找配置文件来实例化容器 1 ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"}); 方法二:在文件系统路径下寻找配置文件来实例化容器 1 Applicatio

Spring IoC/DI

前言 假设项目层次划分包括logic层和dao层,logic层调用dao层完成业务逻辑,dao层一般与数据库交互.定义两个组件,TestLogic和TestDao,分别操作接口ILogic和IDao,这样程序开发时需要考虑怎样管理这两个组件. 传统方式 这种方式中,当TestLogic组件需要调用TestDao组件时,直接使用关键字new IDao testDao = new TestDao(); 这种方式简单直观,但造成了对外部组件的严重依赖,程序高度耦合,效率低下.当项目需要更换组件时需要修

Spring+IOC(DI)+AOP概念及优缺点

Spring pring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应用一般不依赖于spring的类. 容器:Spring是个容器,因为它包含并且管理应用对象的生命周期和配置.如对象的创建.销毁.回调等. 框架:Spring作为一个框架,提供了一些基础功能,(如事务管理,持久层集成等),使开发人员更专注于开发应用逻辑. Spring的优点1.降低了组件之间的耦合性 ,

spring ioc DI 理解

下面是我从网上找来的一些大牛对spring ioc和DI的理解,希望也能让你对Spring ioc和DI的设计思想有更进一步的认识. 一.分享Iteye的开涛对Ioc的精彩讲解 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们

spring IOC/DI容器的理解

参与者:应用程序和spring正向:现在的程序方向,A对象要使用B对象,现在是A里面直接创建B的实例,然后调用.publc class A{ void t1(){ new B().t2();  }}public class B{void t2(); 简而言之,就是程序需要什么.就由程序主动去获取需要的资源,这个方向就是正向.容器是用来创建和装配对象,并管理对象生命周期的.对于应用程序而言,就是被动实例化和被动接受依赖了.装配:在spring容器内拼凑bean叫作装配.装配bean的时候,你是在告

记录学习Spring(IOC/DI)

根据自己学习的Spring做一些记录,主要是为了方便自己查阅复习. 一.介绍Spring Spring是一个基于IOC和AOP的结构J2EE系统的轻量级框架; 轻量级主要变现为不需要任何的容器就可以直接运行;  IOC 反转控制 是Spring的基础,Inversion Of Control ; 也就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象 ; DI 依赖注入 Dependency Inject. 简单地说就是拿到的对象的属性,已经被注入好相关值了,直接

spring IOC(DI)实验

软件151  张鑫栋 一.IOC的意思是控件反转也就是由容器控制程序之间的关系,把控件权交给了外部容器,之前的写法,由程序代码直接操控,而现在控制权由应用代码中转到了外部容器,控制权的转移是所谓反转.DI(Dependency Injection,依赖注入).IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象.这一点是通过DI(Dependency Injection,依赖注入)来实现的. IOC实现的原理: 定义DAO接口和接口的实现类 package com.dao; p