• 什么是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. AtCoder Regular Contest 098 D - Xor Sum 2 区间异或=相加 DP思想

    题意:给出n个数,求它的连续子序列中,满足下列公式,(l,r)的对数有多少对 Al xor Al+1 xor … xor Ar=Al + Al+1 + … + Ar 思路:由题意可以得到,连续子序列, ...

  2. [POJ1014]Dividing(二进制优化多重背包)

    #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int ...

  3. MongoDB入门---文档查询操作之条件查询&and查询&or查询

    经过前几天的学习之路,今天终于到了重头戏了.那就是文档查询操作.话不多说哈,直接看下语法: db.collection.find(query, projection) query :可选,使用查询操作 ...

  4. Jedis+Redis+spring缓存

    Redis程序使用它?Jedis 访问redis java api Redis-server & //后台运行防火墙要关闭 ts-parent的pom.xml加上jedis依赖 <dep ...

  5. Uber优步北京第一组奖励政策

    优步北京第一组: 定义为2015年6月1日凌晨前(不含6月1日)激活的司机(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机 ...

  6. Openstack Havana的两个排错过程

    问题一:Timeout wating on RPC response, topic:"network" 描述: 启动实例一直等待,然后变为error.查看日志,是 timeout ...

  7. bbblack的网络socket通信实验

    1. 本次用bbblack作网络的通信实验,对了,这个板子必须装SD卡才能启动吗?板载的4GB eMMC Flash 存储器,eMMC (Embedded Multi Media Card) 为MMC ...

  8. 如何往eclipse中导入maven项目

    现在公司中大部分项目可能都是使用maven来构建,假如现在摆在你面前有一个maven的项目,如果你要学习它,如何将它导入到像eclipse这样的集成开发工具中呢,以项目public_class_1为例 ...

  9. Java开发工程师(Web方向) - 02.Servlet技术 - 期末考试

    Servlet课程考试 Servlet课程考试 Servlet课程考试 总分:55分 限定时间:120分钟 进入考试 答案已成功提交!请耐心等待成绩公布 Servlet课程考试: 1(12分) 简单谈 ...

  10. C 计算员工工资

    #include <stdio.h> int main(int argc, char **argv) { //定义四个变量 g每小时固定的工资 40 固定工作时间 pay工资 hours员 ...