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. Dash:程序员的好帮手(转载)

    作为一名死coder,每天最常见的动作就是查看各种API文档,你一定也有过同时打开N个窗口(HTML.PDF.CHM),不停的在编辑器与文档之间切换的感受吧?怎么说呢,其实我很讨厌这种枯燥无味的动作, ...

  2. Maven Spring BOM (bill of materials)

    为了防止用Maven管理Spring项目时,不同的项目依赖了不同版本的Spring,可以使用Maven BOM来解决者一问题. 在依赖管理时,引入spring-framework-bom,如: < ...

  3. 什么是 dynaTrace Ajax

    随着 jQuery.Dojo.YUI 等框架的兴起让构建 Web2.0 应用更加容易,但随之带来的定位等应用问题也越来越难,尤其是与性能相关的.dynaTrace Ajax Edition 是一个强大 ...

  4. php 从2维数组组合为四维数组分析

  5. union-find算法

     1.背景 <算法>一书中提到了关于算法的一些基本思想 优秀的算法因为能够解决实际的问题而变得更为重要: 高效算法的代码可以很简单: 理解某个实现的性能特点是一项有趣而令人满足的挑战: 在 ...

  6. Python id

    # id()函数可以帮我们查看一个变量的内存地址 a = 10 b = 30 print(id(a)) print(id(b)) lst = ["周杰伦","麻花藤&qu ...

  7. 配置阿里云ECS支持IPv6,解决苹果app审核失败问题

    前几天iOS的App提交给苹果审核没通过,给出的原因是:该应用在 IPv6 的环境下无法使用.检查发现:阿里云优化过的系统没有启用IPv6协议,需要配置启用一下,但是只单独启用IPv6也是无法直接提供 ...

  8. SIM800C SIM卡唯一标识符ICCID

    /******************************************************************************* * SIM800C SIM卡唯一标识符 ...

  9. linux shell终端打开方式

    前言 Linux操作系统没有Window操作系统界面友好,使用者需要使用命令与系统进行交互,交互媒介为shell终端. 有三种方式可以打开终端: 方法一: 打开新的窗口并打开shell终端,快捷键:c ...

  10. Tomcat问题:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined ,At least one of these environment variable is needed to run this program

    一眼就能看出来是jdk的环境有问题,但是用了这么久的jdk一直都配置的好好的,怎么一到Tomcat上就这么矫情了. 最后查解决方案,原来是我的jdk从官网直接下载的,虽然我修改了java_home,但 ...