• 什么是IoC
  • 如何配置IOC
  • Bean的生命周期
  • 多环境配置
  • 条件化配置Bean

什么是IOC?

IOC有两层含义,

1、控制反转:将对象实例的创建与销毁的权限交给Spring容器管理,而不再是调用对象内部自己new

2、依赖注入:Spring容器检测到对象之间的依赖关系,初始化(或者第一次调用)的时候,将对应的实例注入给相关的对象

如何配置IOC?

Spring通过几种方式,将Bean对象存放在Spring容器中

Spring的配置方法,根据配置“媒介”的不同,可以分为XML、Class类

使用XML对Bean进行配置,又可以按照XML的位置,分为类路径、文件系统路径、Web应用路径

表格中为几种Spring工厂

类路径XML   ClassPathXmlApplication
文件系统路径XML FileSystemXmlApplication
Web应用路径XML XmlWebApplication
Class类 AnnotationConfigApplicationContext、AnnotationConfigWebApplicationContext

使用XML配置Bean

一个最基本的XML配置的Bean如下

<bean id="user" class="demo01.part01.User"/>

使用p命名空间进行属性注入

<bean id="user" class="demo01.part01.User"
p:age="27"
p:name="哇哈哈"/>

一些简单的属性注入与构造器注入,都可以使用p和c命名空间

使用如下

public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) applicationContext.getBean("user");
logger.debug("user:"+user); }

20:36:38.460 [main] DEBUG demo01.part01.Demo01 - user:demo01.part01.User@6e171cd7[name=哇哈哈,age=27]

如果容器中只有一个User实例,可以使用getBean(Class class)方法,这样就无需强制转化了

User user = applicationContext.getBean(User.class);

构造器注入

<bean id="user" class="demo01.part01.User">
<constructor-arg name="name" value="哇哈哈"/>
<constructor-arg name="age" value="12"/>
</bean> OR
<bean id="user" class="demo01.part01.User"
c:name="我问问"
c:age="17"/>

当然,前提是有此种构造方法

XML配置Bean的方式显得很麻烦,所以有更好的注解的方法,配置一个扫描,Bean上添加指定的注解就行。在Spring Boot,甚至连Bean上的注解都可以去掉了。

所以XML配置Bean的方式就不啰嗦了,对于遗留项目中有需要修改的时候,再参考书籍即可。自己开发的时候,尽可能使用Java配置+扫描,或者Spring Boot的方式

注解配置

在XML中使用

<context:component-scan base-package="demo01"/>

配置扫描范围

在Bean上使用注解,标识自己需要被扫描到

/**
* Created by sherry on 17/1/10.
*/
@Component
public class User {
......
}

Java配置

package demo01.part03;

import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.ComponentScan; /**
* Created by sherry on 17/1/10.
*/
@Configurable
@ComponentScan("demo01")
public class SpringBean { }

用一个Java类,代替了XML去描述Bean,Java类可以完全代替XML的配置

以上,只是简单描述了一下Spring容器的初始化的几种风格,实际上Spring的配置非常强大与灵活,足以满足我们开发过程中遇到的各种需求


IOC最佳实践


优先把配置都放在Java中,包括扫描目录、Bean初始化、引入其他Java配置类或XML配置文件

要在开发中遇到实际需求的时候,再考虑Spring为我们提供的简便配置方案

Bean的作用域

singletion:单例,这也是默认作用域

prototype:每次从容器中获取出来的都是新实例

request:

session:

global-session

第二章 IoC的更多相关文章

  1. 第二章 IOC + AOP 底层原理

    <精通Spring4.x 企业应用开发实战>读书笔记 一.概念 IOC: 假设B类调用了A类,那么A类的对象的创建是由B类来实现: IOC是指将A对象的创建由容器来完成,并且将创建好的对象 ...

  2. 《Spring技术内幕》笔记-第二章 IoC容器的实现

    简单介绍 1,在Spring中,SpringIoC提供了一个主要的JavaBean容器.通过IoC模式管理依赖关系.并通过依赖注入和AOP切面增强了为JavaBean这样子的POJO提供事务管理,生命 ...

  3. 第二章 IoC Setter注入

    Setter注入又称为属性注入.是通过属性的setXXX()方法来注入Bean的属性值或依赖对象.由于Setter注入具有可选择性和灵活性高的优点,因此Setter注入是实际应用中最常用的注入方式. ...

  4. 转: 第二章 IoC Annotation注入

    http://blog.csdn.net/p_3er/article/details/9231307 1.命名空间 使用Annotation的方式,需要在spring的配置文件中配置命名空间.命名空间 ...

  5. Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)

    前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,I ...

  6. Java开发工程师(Web方向) - 04.Spring框架 - 第2章.IoC容器

    第2章.IoC容器 IoC容器概述 abstract: 介绍IoC和bean的用处和使用 IoC容器处于整个Spring框架中比较核心的位置:Core Container: Beans, Core, ...

  7. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  8. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  9. Jenkins入门系列之——02第二章 Jenkins安装与配置

    2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...

随机推荐

  1. LeetCode:34. Search for a Range(Medium)

    1. 原题链接 https://leetcode.com/problems/search-for-a-range/description/ 2. 题目要求 给定一个按升序排列的整型数组nums[ ]和 ...

  2. 对JSON的理解

    JSON语法: JSON是一种结构化数据,它是一种数据格式 JSON可以概括为三种类型:简单值.对象.数组 注意:JSON不支持变量.函数和对象实例 一.JSON简单值 包括字符串.数值.布尔值.和n ...

  3. WEB安全基础之sql注入基础

    1.基础sql语句 注释 单行注释# %23--+ --加空格多行注释/**/ SELECT(VERSION()) SELECT(USER()) SELECT(database()) 查数据库 SEL ...

  4. 为什么测试人员必须掌握Linux?

    相信点进来的小伙伴不是对Linux感兴趣就是对测试感兴趣了,也希望本文可以帮助之前接触过Linux的小伙伴找到继续坚持学习下去的动力,之前没接触过Linux的小伙伴也能找到开始学习Linux的兴趣. ...

  5. SQL 怎么实现模糊查询?

    执行数据库查询时,有完整查询和模糊查询之分. 一般模糊语句格式如下: SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件; 其中,关于条件,SQL提供了四种匹配模式: 一.%:表示零 ...

  6. Cannot assign requested address (connect failed)

    压测时,应用服务器报错:Cannot assign requested address (connect failed) 经检查,由于应用服务器,频繁发起http请求,由于每次连接都在很短的时间内结束 ...

  7. 【转】cocos2dx3.2学习笔记之Director(导演类)

    转载:https://blog.csdn.net/u013435551/article/details/38579747 在Cocos2d-x中,把统筹游戏大局的类抽象为导演类(Director),D ...

  8. 学习用MaxScipt批处理Max文件

    学习用MaxScipt批处理Max文件 需求 对几百个.max文件中的指定指定名称的骨骼进行重命名. 解决 考虑到是一次性需求,花了两个钟用maxscript实现了功能,基本逻辑把改名规则做成配置文本 ...

  9. Linux中常用Shell命令

    本随笔文章,由个人博客(鸟不拉屎)转移至博客园 写于:2018 年 05 月 04 日 原地址:https://niaobulashi.com/archives/linux-shell.html -- ...

  10. leetcode-数数并说

     数数并说     报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作  " ...