`
kerlubasola
  • 浏览: 680668 次
文章分类
社区版块
存档分类
最新评论

《Spring攻略》 第1章 Spring简介 - IoC基础

 
阅读更多

1实例化SpringIoC容器

问题:
你必须实例化Spring IoC容器,读取配置来创建bean实例。然后,你可以从Spring IoC容器中得到可用的bean实例。


解决方案:
Spring提供了两种IoC容器实现类型。基本的一种称为Bean工厂(Bean Factory)。另一种称为应用程序上下文(Application Context),这是对bean工厂的一种兼容扩展。
这两种IoC容器类型和Bean配置文件相同。
ApplicationContext接口是用于保持兼容性的BeanFactory的子接口。


工作原理:
实例化应用程序上下文-
各种实现加载文件方式ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、XmlWebApplicationContext等


从IoC容器中得到bean-
为了从bean工厂或者应用程序上下文中得到已声明的bean,你只需要调用getBean()方法并且传递唯一的bean名称,返回Object。


2配置Spring IoC容器中的bean

问题:
Spring提供了一个强大的IoC容器来管理组成应用的Bean。为了使用,你必须配置。


解决方案:
你可以通过XML配置文件、属性文件等方式进行配置。
在简单应用中你可以使用单个配置文件,但是在庞大的系统中一般都会分模块存在多个配置文件或者按照架构层次进行分割。


工作原理:


helloworld:


1、两种基本的简单IoC




2、为Bean配置集合
就是包括基本的List、Set、Map等,基本用法没有什么好说的
但是,当你使用继承的时候,可以使用<list merge="true">来在子类中声明合并父类,但是会放在父类的序列之后。



3调用构造程序创建bean

问题:
你想要调用构造程序在Spring IoC容器中创建 一个bean,这是创建Bean最常见和直接的方法。


解决方案:
通常,当你为一个Bean指定class属性,就将要求Spring IoC容器调用构造程序创建Bean实例。


工作原理:


这里就是为什么如果不不含构造器的IoC,还没有默认无参构造器的时候,会报错Instantiation of bean failed的原因。



4解决构造程序歧义

问题:
当你为Bean指定一个或者多个构造程序参数时,Spring将视图在Bean类中查找对应的构造程序,并且传递用于Bean实例化的参数。


解决方案:
你可以为<constructor-arg>元素指定type和index属性,帮助Spring查找预期的构造程序。


工作原理:
从下面的地方开始说



5指定Bean引用



6为集合元素指定数据类型

问题:
默认情况下,Spring将集合中所有元素作为字符串对待。
如果你不打算将集合元素作为字符串使用,就必须为他们指定数据类型。


解决方案:
可以使用<value>的type指定,也可以在集合标记中指定value-type


工作原理:




具体的封装从BeanDefinitionValueResolver开始说:
然后又借助TypeConverter类型转换器
-->
借助BeanWrapperImpl来获取获取BeanWrapper
-->
借助TypeConverterDelegate进行帮助类型转换
-->
TypeConverterDelegate调用doConvertTextValue
-->
利用包org.springframework.beans.propertyeditors里的各种类型转换辅助工具类进行数据复制和对象获取。
当然具体类型转换还需要靠如NumberUtils


7使用Spring的FactoryBean创建bean

问题:
你可能希望用Spring的工厂Bean在Spring IoC容器中创建Bean。
工厂Bean(Factory Bean)是作为创建IoC容器中其他Bean的工厂的一个FactoryBean。概念上,工厂Bean与工厂方法非常类似,但是他是Bean构造期间可以Spring IoC容器识别为Spring专用Bean。


解决方案:
工厂Bean的要求是实现FactoryBean接口。为了方便,提供了抽象模板类AbstractFactoryBean供你扩展。
工厂Bean主要用于实现框架机制。如:
·在JNDI中查找对象(例如一个数据源)时,你可以使用JndiObjectFactoryBean。
·使用经典Spring AOP为一个Bean创建代理时,可以使用ProxyFactoryBean。
·在IoC容器中创建一个Hibernate会话工厂时,可以使用LocalSessionFactoryBean。


工作原理:
尽管你很少有必要编写自定义的工厂Bean,但是会发现通过一个实例来理解其内部机制很有帮助。
通过扩展AbstractFactoryBean类,你的工厂bean能够重载createInstance()方法以创建目标Bean实例。
此外,你必须getObjectType()方法中返回目标Bean的类型,是自动装配(Auto-wiring)功能正常工作。
名称之前添加&,可以得到工厂Bean的实例。



8使用工厂Bean和Utility Schema定义集合

问题:
使用基本集合标记定义集合时,你不能指定集合的实体类,例如LinkedList、TreeSet或TreeMap,而且,你不能通过将集合定义为可供其他Bean引用的单独Bean在不同的Bean中共享集合。


解决方案:
两种方式
1、使用对应的集合工厂Bean,如ListFactoryBean、SetFactoryBean和MapFactoryBean。
2、引入util schema中使用集合标记,如<util:list>、<util:set>和<util:map>。


工作原理:




9用依赖检查属性

问题:
在大规模的应用中,IoC容器中可能声明了几百个甚至几千上万个Bean,这些Bean之间的依赖往往非常复杂。
设置方法注入的不足之一是无法确定一个属性将会被注入。
检查所有必要的属性是否已经设置是非常困难的。




解决方案:
dependency-check --
none* 不执行任何依赖检查,任何属性都可以保持未设置状态
simple 如果任何简单类型(原始和集合类型)的属性未设置,将抛出UnsatisfiedDependencyException异常
objects 如果任何对象类型属性没有设置,将抛出UnsatisfiedDependencyException异常
all 如果任何类型的属性为设置,将抛出UnsatisfiedDependencyException异常


工作原理:
不过在新的版本中已经废弃


10用@Required注解检查属性



11用XML配置自动装配Bean

问题:
当一个Bean需要访问另一个Bean时,你可以显示指定引用装配他。但是,如果你的容器能够自动装配bean,就可以免去手工手工配置装配的麻烦。


解决方案:
autowire属性--
no* 不执行自动装配。你必须显示的装配依赖
byName 对于每个Bean属性,装配一个同名的bean
byType 对于每个Beam属性,装配类型与之兼容的Bean。如果超过一个,将抛出UnsatisfiedDependencyException异常。
Constructor 对于每个构造程序参数,首先寻找与参数兼容的Bean。然后,选择具有最多参数的构造程序。对于存在歧义的情况,将抛出UnsatisfiedDependencyException异常。
autoetect 如果找到一个没有参数的默认构造程序,依赖讲按照类型自动装配。否则,将由构造程序自动装配。


(不建议用自动装配)


工作原理:



12用@Autowired和@Resource自动装配Bean

问题:
在Bean配置文件中设置autowire属性进行的自动装配将装配一个Bean的所有属性。这样的灵活性不足以紧紧装配特定的属性。
而且,你只能通过类型或者名称自动装配Bean。
如果这两种策略都不能满足你的需求,就必须明确的装配Bean。


解决方案:
你可以通过@Autowired或者@Resource注解一个设置方法、构造程序、字段甚至任意方法自动装配特定的属性。
这意味着你除了设置autowire属性之外,还有一个能够满足需求的选择。


工作原理:
<context:annotation-config />


@Autowired、@Qualifier("mainCatalog")、@Resource(name="myMovieFinder")



13继承Bean配置




14从Classpath中扫描组件




分享到:
评论

相关推荐

    Spring攻略PDF版

     第1章 控制反转和容器   1.1 使用容器管理组件   1.1.1 问题描述   1.1.2 解决方案   1.1.3 实现方法   1.2 使用服务定位器降低查找组件的复杂性   1.2.1 问题描述   1.2.2 解决方案...

    Spring攻略中文版PDF

     第1章 控制反转和容器   1.1 使用容器管理组件   1.1.1 问题描述   1.1.2 解决方案   1.1.3 实现方法   1.2 使用服务定位器降低查找组件的复杂性   1.2.1 问题描述   1.2.2 解决方案...

    SPRING攻略 第2版 (带书签)(二)

    《Spring攻略(第2版)》不仅为你全面而又深入地讲解各种概念,并且在每一章中都配备了一系列详细的代码示例,以帮助读者在实际的工作中迅速应用于实战。 SpringSource为核心框架添加了许多部件。这些部件不仅简化了...

    Spring-IoC 容器 - v1.01

    前言11第 1 章第 1 章设计用户持久化类设计用户持久化类33第 2 章第 2 章工厂模式工厂模式66第 3 章第 3 章工厂模式改进工厂模式改进88第 4

    SPRING攻略 第2版.pdf

    《Spring攻略(第2版)》不仅为你全面而又深入地讲解各种概念,并且在每一章中都配备了一系列详细的代码示例,以帮助读者在实际的工作中迅速应用于实战。 SpringSource为核心框架添加了许多部件。这些部件不仅简化了...

    模拟实现Spring的IOC

    模拟实现__Spring的Ioc 1、Spring主要两个作用:实例化Bean,动态装配Bean。并将所有的bean放到spring容器中,调用时从容器中取。Spring容器就是一个bean的Map:private Map, Object&gt; beans = new HashMap, Object&gt;...

    Spring攻略英文版(附带源码)

     第1章 控制反转和容器   1.1 使用容器管理组件   1.1.1 问题描述   1.1.2 解决方案   1.1.3 实现方法   1.2 使用服务定位器降低查找组件的复杂性   1.2.1 问题描述   1.2.2 解决方案   ...

    第一个spring IOC例子(非maven)

    第一个spring IOC例子(非maven) 方法步骤: 1、下载spring包,提取core,bean,context,expression 四大基础jar http://repo.spring.io/release/org/springframework/spring/ 2、下载common-logging jar ...

    05-IoC入门案例-入门案例制作

    第一个问题,管理什么? 也就是我的Spring容器(也就是IoC容器,以下我们都称为Spring容器)要管的东西是什么?那肯定是对应的Bean。也就是你原来造对象的那些类,是不是我要管完以后把它放到我们的Spring容器中变成...

    跟我学spring3(1-7)

    【第一章】 Spring概述 ——跟我学Spring3 【第二章】 IoC 之 2.1 IoC基础 ——跟我学Spring3 【第二章】 IoC 之 2.2 IoC 容器基本原理 ——跟我学Spring3 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3 ...

    SPRING攻略 第2版 (带书签)(一)

    《Spring攻略(第2版)》不仅为你全面而又深入地讲解各种概念,并且在每一章中都配备了一系列详细的代码示例,以帮助读者在实际的工作中迅速应用于实战。 SpringSource为核心框架添加了许多部件。这些部件不仅简化了...

    Spring攻略(第二版)高清版

    《Spring攻略(第2版)》不仅为你全面而又深入地讲解各种概念,并且在每一章中都配备了一系列详细的代码示例,以帮助读者在实际的工作中迅速应用于实战。 SpringSource为核心框架添加了许多部件。这些部件不仅简化了...

    spring-framework-3.0.0.M4-with-docs

    org.springframework.beans-3.0.0.M4.jar: SpringIoC的基础实现 org.springframework.core-3.0.0.M4.jar: 提供的基础核心功能 org.springframework.context-3.0.0.M4.jar: 提供在基础IoC功能上的扩展服务,此外还...

    第一个spring IOC例子(maven)

    1、安装maven 2、eclipse安装m2eclipse插件 打开Eclipse菜单栏Help-&gt;Eclipse Marketplace 输入“Maven”搜索到插件Maven Integration for Eclipse 并点击insall安装 3、安装成成之后我们在Eclipse菜单栏中点击File-&gt;...

    spring培训-笔记

    (用户持久化类)重构第一步——面向接口编程 8 重构第二步——工厂(Factory)模式 9 重构第三步——工厂(Factory)模式的改进 10 重构第四步-IoC容器 11 控制反转(IoC)/依赖注入(DI) 11 什么是控制反转...

    Spring攻略(第二版 中文高清版).part1

    第1章 Spring简介 1 1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用...

    Spring攻略 英文第二版

    《Spring攻略(第2版)》不仅为你全面而又深入地讲解各种概念,并且在每一章中都配备了一系列详细的代码示例,以帮助读者在实际的工作中迅速应用于实战。 SpringSource为核心框架添加了许多部件。这些部件不仅简化了...

    Spring_IoC入门笔记.md

    第一种:使用构造函数提供(创建对象时,必须提供数据,否则无法创建成功) 使用的标签:constructor-arg 标签出现的位置:bean标签的内部 标签中的属性: type:用于指定要注入的数据的数据类型,该数据类型也是...

Global site tag (gtag.js) - Google Analytics