学习Spring IOC控制反转和DI依赖注入总结
30岁的小曹,20岁的身体,还在坚持在能力允许控制范围内22点睡觉,5点起床锻炼身体,好好学习,除了加班或者像今天这样的深夜,再一次写已经有X百万人写过的 spring Ioc 的总结博客。
一、IOC 控制反转详解:
1).传统非spring管理时候的对象间调用依赖:
我们都知道,随便一本破框架的破书上都说Spring的核心之一IOC-控制反转,控制反转是管理bean的,什么是bean?一切java对象。java对象怎么来的? A a = new A(),New出来的。
那么我们定义个 Pig 类:
public class Pig
{
public String eat()
{
return "猪会吃!";
}
}
我们在定义一个类: Person
public class Person
{
private Pig pig;
public void setPig(Pig pig)
{
this.pig pig;
}
public void usePig()
{
System.out.println("我打算去喂猪!");
System.out.println(pig.eat());
}
}
测试:
public class BeanNSTest
{
public static void mian(String[] args)throws Exception {
Pig pig = new Pig();
Person person = new Persion();
person.setPig(pig);
person.usePig();
}
}
我打算去喂猪!
猪会吃!
//上面介绍的是java传统方式,调用者person主动去创建被依赖对象pig,然后在去调用被依赖对象pig的方法eat。比如上面 Person 主动创建对象pig,然后调动pig.eat()输出。
2). 使用spring 后,spring管理bean是通过用XML配置文件之间管理bean的,例如上面的人和猪的依赖关系:
bean.xml
<bean id="person" class="com.test.Person">
<property name="pig" ref="pig">
</bean>
<bean id="pig" class=“com.test.Pig”>
//<property>中name="pig"的pig是 Person方法中setPig的方法,ref="pig"的pig是setPig的参数;
public class BeanTest
{
public static void mian(String[] args)throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
Person p = ctx.getBean("person",Person.class)
p.usePig();
}
}
//结果:
我打算去喂猪!
猪会吃!
从第二种测试结果来看:使用spring框架后,调用者无需主动获取被依赖对象,只需要被动接受spring容器为调用者的成员变量赋值即可(配置文件property),由此可见,使用spring后 调用者获取被依赖对象的方式由原来的主动获取,变成了 被动接受。于是Rod Johnson【绕波特 . 真桑】将这种方式称为控制反转 IOC。
一、DI依赖注入 超级详解:
1). 因为spring容器 将依赖对象注入给了调用者(通过配置文件),所以调用者无需 主动获取被依赖对象,只要被动等待spring容器注入即可。所以 Martine Fowler【马蹄 . 弗劳尔】 称者叫依赖注入DI。
所以spring IOC控制反转就是依赖注入DI,所以spring IOC控制反转就是依赖注入DI,所以spring IOC控制反转就是依赖注入DI,所以spring IOC控制反转就是依赖注入DI。重要的事情说4遍。
当然spring发展到今天已经由原来的xml配置,改成代码里面注解方式了,更方便点。后续有空再给介绍下,希望未来有人会看到。
30岁的小曹,20岁的身体,go ahead!
学习Spring IOC控制反转和DI依赖注入总结的更多相关文章
- [Spring]IOC控制反转和DI依赖注入
从之前算起到现在接触Spring也已经有几天了,进度也不是很快,就只弄懂了控制反转和依赖注入那么一点东西.然后敲了两个demo 主要是因为之前没有学过,然后网上资源很多但是都不是面向我们初学者的,大多 ...
- Spring的三大核心思想:IOC(控制反转),DI(依赖注入),AOP(面向切面编程)
Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧) 1.IoC是什么? IoC(Inversion of Control)控制反转,IoC是一种新的Java编程模式,目前很多 ...
- [转帖]什么是IOC(控制反转)、DI(依赖注入)
什么是IOC(控制反转).DI(依赖注入) 2018-08-22 21:29:13 Ming339456 阅读数 20642 原文地址(摘要了部分内容):https://blog.csdn.net ...
- 谈谈php里的IOC控制反转,DI依赖注入
理论 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和"DI依赖注入"是什么,能够解决什么问题,这些在维基百科中有非常清晰的说明. 控制反转(In ...
- IoC控制反转与DI依赖注入
IoC控制反转与DI依赖注入 IoC: Inversion of Control IoC是一种模式.目的是达到程序的复用.下面的两篇论文是对IoC的权威解释: InversionOfControl h ...
- 谈谈php里的IOC控制反转,DI依赖注入(转)
转自:http://www.cnblogs.com/qq120848369/p/6129483.html 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和" ...
- Spring-初识Spring框架-IOC控制反转(DI依赖注入)
---恢复内容开始--- IOC :控制反转 (DI:依赖注入)使用ioc模式开发 实体类必须有无参构造方法1.搭建Spring环境下载jarhttp://maven.springframework. ...
- 三大框架 之 Spring(IOC控制反转、DI依赖注入)
目录 常用词汇 left join与left outer join的区别 Struts2的标签库导入 Spring Spring概述 什么是Spring spring特点 下载 IOC 什么IOC 传 ...
- spring(一) IOC 控制反转 、DI 依赖注入
IOC 控制反转:创建对象的方式 变成了由Spring来主导 IOC底层原理:对象工厂 1.导入jar包:4个核心jar和1个依赖jar spring-beans-4.3.9.RELEASE.jar ...
随机推荐
- 网页中<a>标签新窗口和location.href 新窗口打开
在网页制作过程中,经常遇到新窗口打开,一般是a超级链接或者location.href 新窗口打开形式,下面分别讲述两种之间的不同方式 1,a标签 新窗口 添加属性 target="_blan ...
- StringBuffer 和 StringBuilder 总结
StringBuffer 和 StringBuilder 介绍 大多数情况下, StringBuffer 的速度要比 String 快: StringBuilder 要比StringBuffer快:S ...
- 构建CRD工程 - 程序员学点xx 43 k8s
目录 Kubernetes -3- 这是yann的第98篇分享 本日状态: 帮同事排了一天bug. Kubernetes -3- 这是yann的第98篇分享 第 1 部分 承前 昨天用视屏的方式演 ...
- MemCache--01 解决session
目录 1. MemCache介绍 2.Session与Cookie介绍 3. 安装部署Nginx 4. 安装部署PHP 5. 安装Mariadb数据库 6. 部署网站(phpMyAdmin) 7. 部 ...
- 获取服务进程server.exe的pid(0号崩溃)
#include "stdafx.h" #include <windows.h> #include <iostream> #include <COMD ...
- 记录一次 Linux crontab 执行django 脚本 失败 的经历和解决办法
目的是想通过定时任务来执行一次数据统计,本来可以用celery来做,但是想着这个项目整个就没用到异步的地方,所以决定用crontab来做.之前做过数据库的热备份,想来用该没啥问题,但是现实打脸啪啪响. ...
- Centos 的防火墙(firewalld,iptables)
Centos系统防火墙介绍 概述: 1.Filewalld(动态防火墙)作为redhat7系统中变更对于netfilter内核模块的管理工具: 2.iptables service 管理防火墙规则的模 ...
- Python---基础-小游戏用户猜数字
一.10 < cost < 50 的等价表达式 cost = 40 10 < cost < 50 (10 < cost) and (cost < 50) 二.使用i ...
- SpringBoot整合MyBatis-Plus实现快速业务功能开发
概览:使用MybatisPlus和它的代码生成整合SpringBoot可以实现快速的业务功能开发,具体步骤如下 一.添加依赖 <dependency> <groupId>org ...
- JavaScript用在哪里
<script> 标签 在HTML,JavaScript代码必须插入<script> 和 </script>之间的. document.getElementById ...