1. IOC - 控制反转(依赖注入)

所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交

由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周期的管理,而是需要

时由Spring框架提供,这个由Spring框架管理对象创建和生命周期的机制称之为控制反转。而在

创建对象的过程中Spring可以依据配置对象的属性进行设置,这个过程称之为依赖注入,即DI。

2.IOC的入门案例

a.下载Spring

访问Spring官网,下载Spring相关的包

b.解压下载好的压缩包

其中包含着Spring的依赖包

c.创建一个java项目

Spring并不是非要在Javaweb环境下才可以使用,一个普通的java程序也可以使用Spring。

d.导入Spring的libs目录下的IOC相关的jar包

e.创建Spring的配置文件

Spring采用xml文件作为配置文件,xml文件名任意,但是通常都取名为applicationContext.xml,

通常将该文件放置在类加载的目录下(src目录),方便后续使用。

f.创建bean类,并在Spring中进行配置交由Spring来管理

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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-3.2.xsd"
> <bean id="person" class="cn.tedu.beans.Person"></bean>
</beans>

g.在程序中通过Spring容器获取对象并使用

Person.java

package cn.tedu.beans;

public class Person {
public void say() {
System.out.println("person hello spring ~~~");
}
}

Spring_IOC.java

package cn.tedu.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.tedu.beans.Person; public class Spring_IOC { @Test
/**
* Spring IOC的入门案例
*/
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Person p = (Person) context.getBean("person");
p.say();
}
}

3.IOC的实现原理

在初始化一个Spring容器时,Spring回去解析指定的xml文件,当解析到其中的<bean>标签时,

会根据该标签中的class属性指定的类的全路径名,通过反射创建该类的对象,并将该对象存入

内置的Map中管理。其中键就是该标签的id值,值就是该对象。

之后,通过getBean方法来从容器中获取对象时,其实就是根据传入的条件在内置的Map中寻找

是否有匹配的键值,如果有,则将该键值对保存的对象返回,如果没有匹配到则抛出异常。

由此可以推测而知:

默认情况下,多次获取同一个id的bean,得到的将是同一个对象。即使是同一个类,如果配置过

多个<beans>标签下不允许配置多个相同的id的<bean>标签,如果配置则启动抛异常。

4.IOC获取对象的方式

通过context.getBeans()方法获取bean时,可以通过如下两种方式获取:

  传入id值

  传入class类型

通过class方式获取bean时,如果同一个类配置过多的bean,则在获取时因为无法确定到底要获取那个bean会抛出异常

而id是唯一的,不存在这样的问题,所以建议大家尽量使用id获取bean。

@Test
/**
* Spring IOC的入门案例
*/
public void test2(){
/*
<bean id="person" class="cn.tedu.beans.Person"></bean>
*/ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 通过id获取
Person p1 = (Person) context.getBean("person");
p1.say(); // 通过class获取
Person p2 = (Person) context.getBean(Person.class);
p2.say();
}

5.别名标签

在Spring中提供了别名标签<alias>可以为配置的<bean>起一个别名,要注意的是这仅仅是对指定的<bean>起一个额外的名字,并不会额外的创建对象存入map。

<alias name=”要起别名的bean的id“  alias="要指定的别名"/>

    @Test
/**
* Spring IOC的入门案例
*/
public void test3(){
/*
<bean id="person" class="cn.tedu.beans.Person"></bean>
<alias name="person" alias="per"/>
*/ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 通过id获取
Person p = (Person) context.getBean("per");
p.say(); }

Spring IOC - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签的更多相关文章

  1. Spring IOC - 控制反转(依赖注入) - 创建对象的方式

    a.通过类的无参构造方法创建对象 在入门案例中就是这种方式.当用最普通的方式配饰一个<bean>时,默认就是采用类的 无参构造创建对象.在Spring容器初始化时,通过<bean&g ...

  2. Spring IOC - 控制反转(依赖注入) - 单例和多例

    Spring容器管理的bean在默认情况下是单例的,即一个bean只会创建一个对象,存在map中,之后无论获取多少次该bean,都返回同一个对象. Spring默认采用单例方式,减少了对象的创建,从而 ...

  3. Spring IOC - 控制反转(依赖注入) - 配置初始化和销毁的方法

    在Spring中如果某个bean在初始化之后,或销毁之前要做一些额外操作可以为该bean配置初始化和销毁的我方法,在这些方法中完成需要的功能. 实验: 通过断点调试模式,测试初始化方法和销毁方法的执行 ...

  4. Spring IOC - 控制反转(依赖注入) - 懒加载机制

    懒加载机制 Spring默认会在容器初始化的过程中,解析xml,并将单例的bean创建并保存到map中,这样的机制在bean比较少的时间问题不大,但一旦bean非常多时,Spring需要在启动的过程中 ...

  5. 学习Spring IOC控制反转和DI依赖注入总结

    30岁的小曹,20岁的身体,还在坚持在能力允许控制范围内22点睡觉,5点起床锻炼身体,好好学习,除了加班或者像今天这样的深夜,再一次写已经有X百万人写过的 spring Ioc 的总结博客. 一.IO ...

  6. Spring 01: Spring配置 + IOC控制反转 + Setter注入

    简介 Spring框架是一个容器,是整合其他框架的框架 他的核心是IOC(控制反转)和AOP(面向切面编程),由20多个模块构成,在很多领域都提供了优秀的问题解决方案 特点 轻量级:由20多个模块构成 ...

  7. Spring IOC(控制反转)思想笔记

    Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 案例 如果按照之前javaw ...

  8. Spring IoC控制反转创建实例

    Spring IoC控制反转创建实例写一个配置文件beans.xml,配置文件的约束可以访问:完整链接:https://repo.spring.io/libs-release-local/org/sp ...

  9. [Spring]IOC控制反转和DI依赖注入

    从之前算起到现在接触Spring也已经有几天了,进度也不是很快,就只弄懂了控制反转和依赖注入那么一点东西.然后敲了两个demo 主要是因为之前没有学过,然后网上资源很多但是都不是面向我们初学者的,大多 ...

随机推荐

  1. 难度2:ASCII码排序

    ASCII码排序 难度:2描述: 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符. 输入: 第一行输入一个数N,表示有N组测试数据.后面的N行输入多组数据,每组输入数据 ...

  2. python运维01-获取系统基础信息

    1.获取系统主机名,IP,MAC地址 import socket import uuid macs = uuid.UUID(int = uuid.getnode()).hex[-12:] mac = ...

  3. android开源项目集合

    ZXing http://code.google.com/p/zxing/ 条形码.二维码 K-9 Mail http://code.google.com/p/k9mail/ 邮件客户端 Sipdro ...

  4. 第一次做Java程序注意事项

    public class myapp{ public static void main(String[] args){ System.out.println("Hallo Java!&quo ...

  5. windows server 账号克隆

    在dos命令行下隐藏用户的方法:   net user 账户 密码 /add 如果在账号后加 $ 符号 这个账户在cmd命令行下是无法看见的 首先我们设置注册表权限 cmd = > regedt ...

  6. Docker入门讲解

    1:容器重命名 [root@Docker ~]#docker run --name test_container -i -t centos /bin/bash[root@3ba67c6cf3f8 /] ...

  7. Jordan标准形

    一.引入 前面已经指出,一切n阶矩阵A可以分成许多相似类.今要在与A相似的全体矩阵中,找出一个较简单的矩阵来作为相似类的标准形.当然以对角矩阵作为标准形最好,可惜不是每一个矩阵都能与对角矩阵相似.因此 ...

  8. tiny4412 UART for C printf Demo

    /************************************************************************** * tiny4412 UART for C pr ...

  9. shell 脚本实战笔记(2)--环境变量PATH的恩怨情仇

    在linux环境下, 相信大家对环境变量PATH, 多多少少有所接触, 这边讲讲PATH的在linux的前世因缘. 先讲讲一个列子 假如我们在为一个新的应用配置其PATH路径中时,  不小心忽略了原先 ...

  10. Slack 开发入门之 Incoming Webhooks:往 Slack 的 Channel 中发消息

    一个工程师团队使用 Slack 进行团队协作比 QQ / 微信流的效率高多啦.除了基本的 IM 之外,它的扩展性也是非常重要的一点. 本文介绍 Slack 的开发入门:Incoming Webhook ...