IOC装配Bean

1.1 Spring框架Bean实例化的方式

提供了三种方式实例化Bean.

* 构造方法实例化:(默认无参数)

* 静态工厂实例化:

* 实例工厂实例化:

1.1.1 无参数构造方法的实例化:

<!-- 默认情况下使用的就是无参数的构造方法. -->

<bean id="bean1" class="com.sihai.spring3.demo2.Bean1"></bean>

1.1.2 静态工厂实例化:

<!-- 第二种使用静态工厂实例化 -->

<bean id="bean2" class="com.sihai.spring3.demo2.Bean2Factory" factory-method="getBean2"></bean>

1.1.3 实例工厂实例化:

<!-- 第三种使用实例工厂实例化 -->

<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean><bean id="bean3Factory" class="com.sihai.spring3.demo2.Bean3Factory"/>

1.2 Bean的其他配置

1.2.1 id和name的区别:

id遵守XML约束的id的约束.id约束保证这个属性的值是唯一的,而且必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号

name没有这些要求

***** 如果bean标签上没有配置id,那么name可以作为id.

***** 开发中Spring和Struts1整合的时候, /login.

<bean name=”/login” class=””>

现在的开发中都使用id属性即可.

1.2.2 类的作用范围:

scope属性 :

* singleton:单例的.(默认的值.)

* prototype:多例的.

* request:web开发中.创建了一个对象,将这个对象存入request范围,request.setAttribute();

* session:web开发中.创建了一个对象,将这个对象存入session范围,session.setAttribute();

* globalSession:一般用于Porlet应用环境.指的是分布式开发.不是porlet环境,globalSession等同于session;

实际开发中主要使用singleton,prototype

1.2.3 Bean的生命周期:

配置Bean的初始化和销毁的方法:

配置初始化和销毁的方法:

* init-method=”setup”

* destroy-method=”teardown”

执行销毁的时候,必须手动关闭工厂,而且只对scope=”singleton”有效.

Bean的生命周期的11个步骤:

1.instantiate bean对象实例化

2.populate properties 封装属性

3.如果Bean实现BeanNameAware 执行 setBeanName

4.如果Bean实现BeanFactoryAware 或者 ApplicationContextAware 设置工厂 setBeanFactory 或者上下文对象 setApplicationContext

5.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization

6.如果Bean实现InitializingBean 执行 afterPropertiesSet

7.调用<bean init-method="init"> 指定初始化方法 init

8.如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization

9.执行业务处理

10.如果Bean实现 DisposableBean 执行 destroy

11.调用<bean destroy-method="customerDestroy"> 指定销毁方法 customerDestroy

1.3 Bean中属性注入

Spring支持构造方法注入和setter方法注入:

1.3.1 构造器注入:

<bean id="car" class="com.sihai.spring3.demo5.Car"><!-- <constructor-arg name="name" value="宝马"/><constructor-arg name="price" value="1000000"/> --><constructor-arg index="0" type="java.lang.String" value="奔驰"/><constructor-arg index="1" type="java.lang.Double" value="2000000"/></bean>

1.3.2 setter方法注入:

<bean id="car2" class="com.sihai.spring3.demo5.Car2"><!-- <property>标签中name就是属性名称,value是普通属性的值,ref:引用其他的对象 --><property name="name" value="保时捷"/><property name="price" value="5000000"/></bean>

1.3.3 setter方法注入对象属性:

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

1.3.4 名称空间p:注入属性:

Spring2.5版本引入了名称空间p.

p:<属性名>="xxx" 引入常量值

p:<属性名>-ref="xxx" 引用其它Bean对象

引入名称空间:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans " >http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="car2" class="com.sihai.spring3.demo5.Car2" p:name="宝马" p:price="400000"/><bean id="person" class="com.sihai.spring3.demo5.Person" p:name="童童" p:car2-ref="car2"/>

1.3.5 SpEL:属性的注入:

Spring3.0提供注入属性方式:

语法:#{表达式}

<bean id="" value="#{表达式}">

<bean id="car2" class="com.sihai.spring3.demo5.Car2"><property name="name" value="#{'大众'}"></property><property name="price" value="#{'120000'}"></property></bean><bean id="person" class="com.sihai.spring3.demo5.Person"><!--<property name="name" value="#{personInfo.name}"/>--><property name="name" value="#{personInfo.showName()}"/><property name="car2" value="#{car2}"/></bean><bean id="personInfo" class="com.sihai.spring3.demo5.PersonInfo"><property name="name" value="张三"/></bean>

1.4 集合属性的注入:

<bean id="collectionBean" class="com.sihai.spring3.demo6.CollectionBean"><!-- 注入List集合 --><property name="list"><list><value>童童</value><value>小凤</value></list></property><!-- 注入set集合 --><property name="set"><set><value>杜宏</value><value>如花</value></set></property><!-- 注入map集合 --><property name="map"><map><entry key="刚刚" value="111"/><entry key="娇娇" value="333"/></map></property><property name="properties"><props><prop key="username">root</prop><prop key="password">123</prop></props></property></bean>

1.5 加载配置文件:

一种写法:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml",”bean2.xml”);

二种方法:

<import resource="applicationContext2.xml"/>

Spring教程--IOC(控制反转)详解相关推荐

  1. Spring IOC(控制反转)详解及示例

    控制反转--Spring通过一种称作控制反转(IOC)的技术促进了低耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JN ...

  2. 详解spring的IOC控制反转和DI依赖注入

    转载 详解spring的IOC控制反转和DI依赖注入 2018-06-05 15:45:34 jiuqijack 阅读数 2945 文章标签: spring IOC控制反转 DI依赖注入 更多 分类专 ...

  3. Spring原理-IOC控制反转

    spring相关文章 Spring原理-IOC控制反转 Spring框架七大核心模块 Spring Beans原理–bean生命周期 一.Spring概述 1. 定义 Spring是一个轻量级Java ...

  4. (八)Spring之IOC控制反转、DI依赖注入介绍和使用(详解)

    文章目录 前言 Spring Spring IOC 简介 Bean IOC 概述 IOC 本质理解 Spring IOC 应用 IOC xml装配 IOC 依赖注入 IOC Bean的作用域 IoC ...

  5. 三大框架之spring框架+IoC控制反转、DI依赖注入

    三大框架:业务层框架Spring+IoC+DI 往期文章:jsp与cookie.重定向与RESTFul架构支持 下一章节: 持久层框架MyBatis 初识Spring框架 MyBatis 入门http ...

  6. Spring的ioc控制反转

    spring介绍 Spring的出现是为了取代EJB(Enterprise JavaBean)的臃肿.低效.脱离现实的缺点. Spring致力于J2EE应用的各层(表现层.业务层.持久层)的解决方案, ...

  7. 浅谈spring之IoC控制反转

    以下学习资料来源于b站动力节点 spring: 出现是在2002左右,解决企业开发的难度.减轻对项目模块之间的管理,类和类之间的管理, 帮助开发人员创建对象,管理对象之间的关系.spring核心技术 ...

  8. Spring之IOC~控制反转

    1.Spring概述 1.1.什么是Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One- ...

  9. Spring-初识Spring框架-IOC控制反转(DI依赖注入)

    ---恢复内容开始--- IOC :控制反转 (DI:依赖注入) 使用ioc模式开发 实体类必须有无参构造方法 1.搭建Spring环境 下载jar http://maven.springframew ...

  10. Spring的IOC(控制反转)与DI(依赖注入)

    Spring控制反转与依赖注入 文章目录 Spring控制反转与依赖注入 1. 控制反转(IOC) 2. 依赖注入(DI) 3. 总结 1. 控制反转(IOC) 控制反转(Inversion of C ...

最新文章

  1. 【Groovy】编译时元编程 ( 利用注解进行 AST 语法树转换 | 定义注解并使用 GroovyASTTransformationClass 注明 AST 转换接口 | AST 转换接口实现 )
  2. 哈尔滨__伏尔加庄园
  3. 区块链BaaS云服务(25)边界智能 IRITA平台
  4. boost::mp11::mp_drop相关用法的测试程序
  5. webservice用cxf发布SOAP
  6. Python 获取本机或者服务器的 IP 地址
  7. python是脚本语言_Python 脚本语言
  8. LCIS最长公共上升子序列
  9. 微信小程序获取当前地理位置中文_微信小程序获取位置信息
  10. enum ordinal_Java Enum ordinal()方法与示例
  11. 【Games101】Lecture05 光栅化 笔记
  12. 7、全国天气查询API接口,免费好用
  13. RecyclerView使用 及 滑动时加载图片优化方案
  14. 5G改变的不仅是网速,还可以改变这些......
  15. countupjs,一个有趣的数字翻滚动画
  16. 好莱坞原则和IOC控制反转
  17. 论文笔记:Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World
  18. [Android] 能用的QQ轻聊版,3.7.1 安装后占用 36M 界面简洁,启动速度快
  19. 主成分分析(PCA)原理与推导
  20. .com和.cn有什么区别

热门文章

  1. 数据挖掘领域十大经典算法
  2. AB1601开机运行后死机
  3. yzmcms图片自适应代码_[ NeurIPS 2020 ] 一叶知秋 —— 基于“单目标域样本”的领域自适应方法...
  4. 图形基础 GPU架构(5)GPU vs CPU
  5. cmake (3)多个源文件示例
  6. C++ Primer 5th笔记(chap 19 特殊工具与技术)运行时类型识別RTTI
  7. Bech32编码 (1)产生背景
  8. MAP Protocol 协议(1)初步介绍
  9. [gic]-ARM gicv3/gicv4的详细介绍-2020/08
  10. 查看mysql 内核_如何查看和更新数据库内核小版本