Spring IOC - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签
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 - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签的更多相关文章
- Spring IOC - 控制反转(依赖注入) - 创建对象的方式
a.通过类的无参构造方法创建对象 在入门案例中就是这种方式.当用最普通的方式配饰一个<bean>时,默认就是采用类的 无参构造创建对象.在Spring容器初始化时,通过<bean&g ...
- Spring IOC - 控制反转(依赖注入) - 单例和多例
Spring容器管理的bean在默认情况下是单例的,即一个bean只会创建一个对象,存在map中,之后无论获取多少次该bean,都返回同一个对象. Spring默认采用单例方式,减少了对象的创建,从而 ...
- Spring IOC - 控制反转(依赖注入) - 配置初始化和销毁的方法
在Spring中如果某个bean在初始化之后,或销毁之前要做一些额外操作可以为该bean配置初始化和销毁的我方法,在这些方法中完成需要的功能. 实验: 通过断点调试模式,测试初始化方法和销毁方法的执行 ...
- Spring IOC - 控制反转(依赖注入) - 懒加载机制
懒加载机制 Spring默认会在容器初始化的过程中,解析xml,并将单例的bean创建并保存到map中,这样的机制在bean比较少的时间问题不大,但一旦bean非常多时,Spring需要在启动的过程中 ...
- 学习Spring IOC控制反转和DI依赖注入总结
30岁的小曹,20岁的身体,还在坚持在能力允许控制范围内22点睡觉,5点起床锻炼身体,好好学习,除了加班或者像今天这样的深夜,再一次写已经有X百万人写过的 spring Ioc 的总结博客. 一.IO ...
- Spring 01: Spring配置 + IOC控制反转 + Setter注入
简介 Spring框架是一个容器,是整合其他框架的框架 他的核心是IOC(控制反转)和AOP(面向切面编程),由20多个模块构成,在很多领域都提供了优秀的问题解决方案 特点 轻量级:由20多个模块构成 ...
- Spring IOC(控制反转)思想笔记
Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 案例 如果按照之前javaw ...
- Spring IoC控制反转创建实例
Spring IoC控制反转创建实例写一个配置文件beans.xml,配置文件的约束可以访问:完整链接:https://repo.spring.io/libs-release-local/org/sp ...
- [Spring]IOC控制反转和DI依赖注入
从之前算起到现在接触Spring也已经有几天了,进度也不是很快,就只弄懂了控制反转和依赖注入那么一点东西.然后敲了两个demo 主要是因为之前没有学过,然后网上资源很多但是都不是面向我们初学者的,大多 ...
随机推荐
- ehlib 如何用代码,选中checkbox呢?
TDBGridEh = class(TCustomDBGridEh) public property Col; property Row; property Canvas; // property G ...
- Hibernate核心组件详解
Hibernate是对象/关系映射(ORM,Object/Relational Mapping)的解决方案,就是将Java对象与对象关系映射到关系型数据库中的表格与表格之间的关系.它是Java应用与关 ...
- L1-012 计算指数
真的没骗你,这道才是简单题 —— 对任意给定的不超过 10 的正整数 n,要求你输出 2n.不难吧? 输入格式: 输入在一行中给出一个不超过 10 的正整数 n. 输出格式: 在一行中按照格式 ...
- 2018-2019-2 网络对抗技术 20165202 Exp2 后门原理与实践
博客目录 一.基础问题回答 二.实验准备:后门软件 1.Windows获得Linux Shell 2.Linux获得Windows Shell 3.使用nc传输数据 4.使用ncat实现文件传输 三. ...
- ubuntu下的烧录工具
Flash Image Tool1.0 为了ubuntu下能够方便地烧录版本,我开发了Flash Image Tool.现在服务器(192.167.100.225)上有一份它的拷贝share/Tool ...
- jQuery单选组美化特效
需求:根据数据动态生成单选组 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- UI基础:UIControl及其子类
UISegmentedControl UISegmentedControl 是iOS中的分段控件 每个segment 都能被点击,相当于集成了若干个button. 通常我们会点击不同的segment ...
- OK335xS U-boot GPIO control hacking
/**************************************************************************************** * OK335xS ...
- MyEclipse多次重装、删除注册表、重装系统激活都不成功,终极解决方法 - imsoft.cnblogs
问题:注册成功的MyEclipse被修改了一个配置文件之后,激活失败,然后在网上找激活码,激活不成功,但激活文件一直保存在电脑中,每次打开MyEclipse的激活界面总看得到之前的激活码.后面尝试 ...
- 浏览器中的data类型的Url格式,data:image/png,data:image/jpeg!(源自:http://blog.csdn.net/roadmore/article/details/38498719)
所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些“小”的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag,哪怕这个图片非常非常 ...