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. Java——String类

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  2. 难度2:ASCII码排序

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

  3. 安装Win8后必做的优化

    原版或者精简版的希望都看看安装好Win8后必做的优化:1.关闭家庭组,因为这功能会导致硬盘和CPU处于高负荷状态关闭方法:Win+C – 设置 – 更改电脑设置 – 家庭组 – 离开如果用不到家庭组可 ...

  4. java.lang.NoClassDefFoundError: Could not initialize class org.jfree.chart.JFreeChart

    最近在进行利用jfreechart生成图表时发现,项目在本地运行的好好的,一部署到服务器(linux系统)上就不行,报这样的错误: java.lang.NoClassDefFoundError: Co ...

  5. UI基础:UITableView表视图

    表视图 UITableView,iOS中最重要的视图,随处可见. 表视图通常用来管理一组具有相同数据结构的数据. UITableView继承于UIScrollView,所以可以滚动 表视图的每条数据都 ...

  6. MySQL性能优化方法三:索引优化

    原文链接:http://isky000.com/database/mysql-performance-tuning-index 大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引可以提高数据 ...

  7. 关于CGI和FastCGI的理解

    在搭建 LAMP/LNMP 服务器时,会经常遇到 PHP-FPM.FastCGI和CGI 这几个概念.如果对它们一知半解,很难搭建出高性能的服务器. 0.CGI的引入 在网站的整体架构中,Web Se ...

  8. OLED的相关信息

    有2种方式与OLED模块相连接,一种是8080的并口方式,另一种是4线SPI方式. ALIENTEK OLED 模块的 8080 接口方式需要如下一些信号线:CS: OLED 片选信号.WR:向 OL ...

  9. MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet

    http://blog.csdn.net/21aspnet/article/details/21867241   1.安装准备 1).下载安装MyEclipse2014,这已经是最新版本. 2).下载 ...

  10. Docker私有镜像仓库

    使用阿里云加速: tee /etc/docker/daemon.json << 'EOF' { "registry-mirrors": [ "https:// ...