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. TMemo的ScrollBars属性和大文本

    给TMemo.Text := '几M大的文本'; 如果 ScrollBars 不是 sbBoth的话,程序很可能 无响应. 今天郁闷了半天才发现的.

  2. MyEclipse WebSphere开发教程:安装和更新WebSphere 6.1, JAX-WS, EJB 3.0(四)

    MyEclipse超值折扣 限量 100 套! 立即开抢>> [MyEclipse最新版下载] MyEclipse支持Java EE技术(如JAX-WS和EJB 3.0),它们以功能包的形 ...

  3. SharePoint 2010 Ribbon with wrong style in Chrome and Safari

    When we add custom ribbon to SharePoint 2010, it may display well in IE but not in Chrome and Safari ...

  4. L219 China's office workers consider further education, training essential

    More than 90 percent of China's office workers consider on-the-job training and continuing education ...

  5. 用tornado实现一个简单的websocket样例

    想用SPRING MVC,NODE.JS EXPRESS,TORNADO实现同一个功能,开阔一下视野. 先来TORNADO的吧.. 客户端代码都差不多,主要是服务端代码. TORNADO的说法: ht ...

  6. Tomcat学习之二:tomcat安装、配置及目录文件说明

    我们看到tomcat目录/bin文件夹里有个tomcat6w.exe,顾名思义就是tomcat以window方式显示控制台.第1次点击打开它时候,可能会提示:tomcat指定的服务未安装,此时我们可以 ...

  7. my.cnf配置优化

    MYSQL服务器my.cnf配置文档详解硬件:内存16G[client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-reha ...

  8. UIView.animateWithDuration 没有动画过渡效果直接跳到最后

    当我在viewDidLoad()方法内添加以下代码的时候发现程序运行时不会有动画过度效果,而是直接跳到了最后. let x = (self.view.bounds.size.width - 268) ...

  9. 《利用Python进行数据分析》笔记---第6章数据加载、存储与文件格式

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  10. 微信小程序插件使用

    使用插件 小程序开发者可便捷地把插件添加到自己的小程序内,丰富小程序的服务.当用户在使用小程序时,将可以在小程序内使用插件提供的服务. 开放范围 所有小程序 接入流程 在小程序管理后台添加插件 小程序 ...