Spring学习之Ioc控制反转(1)
开始之前:
1. 本博文为原创,转载请注明出处
2. 作者非计算机科班出身,如有错误,请多指正
---------------------------------------------------------------------------开始啦啦啦啦啦-------------------------------------------------------------------------------
从开始接触spring起,听到最多的就是Ioc(控制反转)和AOP(面向切面编程)啦。Spring的官方文档给出了这样一个框架图(><看起来好深奥~~)。不过本篇要介绍的所谓的控制反转,就是通过core里面的bean以及context jar包实现的哦。其他的jar包会在之后的章节中讲到。

控制反转,也可以称之为依赖注入(dependency injection),指的是当依赖被创建,或从工厂里获得以后,其他类可以通过构造方法,工厂方法,或set方法得到此依赖。通俗一点的说,就是一个类里面依赖的创建及使用,不需要在类本身new出此依赖,只要注入即可使用。举个例子,我有一辆汽车,需要燃油才能发动,然而我总不能自己去开采燃油,我只需要去加油站加点油,不管你是中石油还是壳牌油,总之油注入进来了,车就可以发动了。这里的燃油就是一个依赖类,这样可以被注入的依赖类,我们称之为bean,而对bean进行初始化,配置和集成操作的,我们称之为Ioc容器(类似于加油站了)。Ioc容器的编译可以使用xml,Java注解或Java程序来实现。虽然本人更喜欢注解的方式(尤其是使用了Spring Boot),但是入门起见,还是用xml掌握一下基础知识再根据心情选方式吧~
那么问题来啦,bean到底是咋创建的呢?下面给出了简单的bean的定义结构
<?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.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
这是一段简单的xml代码,可以看到beans里面定义了很多的bean,每个bean都映射到一个类,这些类就是你所要使用的依赖啦。下面我们来看容器和beans是怎么关联的。
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});
这里的ApplicationContext是context jar包里面的容器接口,它读取了两个xml文件作为容器的配置,来完成各种bean的创建与关联。
让我们来实际操作一下,首先定义两个xml的文件
service.xml (service里面有一个依赖叫做petStore,而petStore里面又有两个依赖accountDao和itemDao,他们是在其他文件里面创建的bean,在service.xml里面被注入进来)
<?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.xsd">
<!-- services -->
<bean id="petStore" class="com.dabingguozi.generaltest.pojo.PetStoreService">
<property name="accountDAO" ref="accountDAO"/>
<property name="itemDAO" ref="itemDAO"/>
<!-- additional collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions for services go here -->
</beans>
daos.xml (service中petStore所注入的依赖accountDao和itemDao在这里创建)
<?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.xsd">
<bean id="accountDAO"
class="com.dabingguozi.generaltest.pojo.AccountDAO">
<!-- additional collaborators and configuration for this bean go here -->
</bean>
<bean id="itemDAO" class="com.dabingguozi.generaltest.pojo.ItemDAO">
<!-- additional collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions for data access objects go here -->
</beans>
最后,不要忘记了,在Java里面定义你的三个类(PetStoreService.java, ItemDAO.java, AccountDAO.java注意要包含set方法)和你的主程序(如下)
public class App {
public static void main(String[] a){
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"daos.xml", "services.xml"});
// retrieve configured instance
PetStoreService service = context.getBean("petStore", PetStoreService.class);
// use configured instance
List<String> userList = service.getUsernameList();
System.out.print(userList);
}
}
如有报错,看看是不是jar包没有导入,本人使用maven管理lib,详见:https://mvnrepository.com/artifact/org.springframework
在Intellij里面试一试,看看是不是我们想要的效果呢?

我们成功的打出了依赖的类名。散花^^如此一来,我们的Spring之旅正式开始啦~~
下一篇继续研究控制反转中bean定义的一些内容,博主首博,诚谢观看。
本博客内容参考spring framework官方文档,如有冲突,请参照原版内容
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/index.html
Spring学习之Ioc控制反转(1)的更多相关文章
- Spring学习之Ioc控制反转(2)
开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...
- Spring框架之IOC(控制反转)
[TOC] 第一章Spring框架简介 IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,很好地实现了解耦合.所以,简单来说,Spring是一个轻量级的控制反转(IoC)和面向 ...
- Spring框架中IoC(控制反转)的原理(转)
原文链接:Spring框架中IoC(控制反转)的原理 一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作, ...
- Spring源码——IOC控制反转
1.基础知识 Spring有两个核心功能,分别是ioc和aop,其中ioc是控制反转,aop是切面编程. 在ioc中,还有一个名次叫DI,也就是依赖注入.嗯,好像IOC和DI是指同一个,好像又感觉他俩 ...
- Spring第一课:IOC控制反转,什么是反转,什么又是控制?
前言 学习Spring第一课,就是认识IOC控制反转,要了解它还真得花一些功夫.今天主要理解透彻它的真谛,而不仅限于表面. 上道小菜 public class BusinessService { pr ...
- Spring 什么是 IOC 控制反转 ?什么是依赖注入?spring的用处 好处 为什么要用
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha Spring是一个开源的控制反转(Inversion of Control ,IoC)和 ...
- 零基础带你看Spring源码——IOC控制反转
本章开始来学习下Spring的源码,看看Spring框架最核心.最常用的功能是怎么实现的. 网上介绍Spring,说源码的文章,大多数都是生搬硬推,都是直接看来的观点换个描述就放出来.这并不能说有问题 ...
- spring学习总结一----控制反转与依赖注入
spring作为java EE中使用最为广泛的框架,它的设计体现了很多设计模式中经典的原则和思想,所以,该框架的各种实现方法非常值得我们去研究,下面先对spring中最为重要的思想之一----控制反转 ...
- Spring学习笔记——01 控制反转
想一下之前学的Java,如果某个类需要引用某个对象,则需要手动new一个出来.这样带来的一个问题就是,若被引用的类发生改动或被删除,则引用它的所有类都会报错.因为两个类耦合在一起了.解决的办法就是不由 ...
随机推荐
- ios学习笔记-数据持久化
沙盒 沙盒是一种数据安全策略,只允许自己的应用访问目录.可以使用NSHomeDirectory()获取. ios沙盒下有三个子目录: 1.Documents目录:用于存储比较大的文件活着需要频发女更新 ...
- oracle 两个时间相减
oracle 两个时间相减默认的是天数 oracle 两个时间相减默认的是天数*24 为相差的小时数 oracle 两个时间相减默认的是天数*24*60 为相差的分钟数 oracle 两个时间相减默认 ...
- jsp生成html
这几天公司需要生成静态的HTML页面以减小数据库与服务器的压力和负担,于是在网络上一阵狂搜,找到几篇相当不错的文章和一些相当有用的资料.为了方便,我整理在自己的BLOG,以供参考! 在接下来的应用中, ...
- Django 实战 之 搭项目(正在更新)
系统:win10 python版本:python 3.5 工具: pyCharm 3.4 professional 源码来源:https://github.com/ouzhigang/django-o ...
- java的GUI编程
目前有三种创建模版产生应用窗体: 第一种: public class MenuDemo implements ActionListener{ //你的组件(成员变量) public MenuDemo( ...
- Obstack是C标准库里面对内存管理的GNU扩展
Obstack是C标准库里面对内存管理的GNU扩展 Obstack介绍 Obstack初始化 在Obstack中申请对象 释放对象 申请growing object 获取Obstack状态 数据对齐 ...
- information_schema.triggers 学习
mysql实例中的每一个trigger 对应到information_schema.triggers 中有一行 1.information_schema.triggers 表的常用列: 1.trigg ...
- java设计模式--行为型模式--备忘录模式
备忘录模式,我们平常所做的备忘录么.还得深深研究哦. 备忘录模式: 备忘录模式 概述 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状 ...
- C# Cookie编程
Cookie,他最早出现是在Netscape Navigator 2.0中.Cookie其实就是由Web服务器创建的.将信息存储在机上的文件.那么为什么Web服务器要在客户机上面创建如此文件?这是因为 ...
- Reverse Linked List 解答
Question Reverse a singly linked list. Solution 1 -- Iterative Remember to set head.next = null or i ...