Spring(1)---IOC容器
来源:互联网 发布:大众汽车维修软件 编辑:程序博客网 时间:2024/06/05 07:30
原本毕设打算使用SSH(Spring + Strust2 + Hibernate)框架搭建,当时太懒,觉得Spring学起来太麻烦就弃之没用,仅仅使用了Strust2和Hibernate。现在公司项目要用到Spring,准备系统的学一下Spring,回想起毕设用到的两个框架,发现自己已经忘了十之八九,所以决定在学的时候把自己所学到的稍稍记录一番,不至于过个几年不用又得从头学起。
虽然有点遗憾没有在做毕设的时候学Spring,现在想来其实还是很幸运的,毕竟SSH都是已经封装好了的框架,学会了用起来的却很方便,但框架内部用到的大部分技术一知半解甚至一点不得知。所以还是很庆幸在学习Web开发的时候没有直接使用框架,现在学Spring体系结构的时候不会显得太吃力。
什么是Ioc
Ioc(Inverse of Control:控制反转),即某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定。这四个字第一次接触真的很难理解其中的含义,因为确实不够开门见山,最终Martin Fowler提出了DI(Dependency Injection: 依赖注入)的概念用以替代Ioc。
说的直白一点就是降低类于类之间的耦合度,类与类之间的调用都由第三方控制和管理javabean的整个生命周期,也就是说我们不必考虑bean的实例化、回收和其他一系列的问题,这些全部都由Ioc容器控制,我们在使用bean时只要向Ioc容器申请即可。
Ioc的注入方式
获取Car的信息
public class CarMessage{ private Car car = new benz(); public String getCarBrandName(){ return car.getBrandName; } public void carRun(){ System.out.println(car.getName + " is running"); }}
我们发现这个类只能获取benz的信息,那如果要获取其他车的信息呢?
这个时候我们再来讨论Ioc(控制反转),“控制”是指选择汽车品牌的控制权;“反转”是指这种控制权从CarMessage中移除,交到第三方手中。
其实Ioc也可以看做是一种设计模式。
Ioc的三种注入方式
1.构造函数注入
2.属性注入
3.接口注入
1.构造函数注入
通过调用类的构造函数,将接口实现类通过构造函数变量传入。
// 通过构造函数注入车辆public class CarMessage(){ private Car car; public CarMessage(Car car){ this.car = car; } public String getCarBrandName(){ return car.getBrandName; }}//得到车辆的品牌信息,我们只指定车的类型即可输出车的品牌信息public class getBrandName{ public static void main(String[] args) { Car benz = new Benz(); CarMessage carMessage = new CarMessage(benz); System.out.println(carMessage.getCarBrandName()); }}
2.属性注入
如下代码中如果只有在调用carRun方法时我们需要用到car实体,这个时候通过构造函数注入的方法并不妥当,我们通过调用类的Setter方法,将接口实现类通过构造函数变量传入。
// 通过属性注入车辆信息public class CarMessage(){ private Car car; public setCar(Car car){ this.car = car; } public void carIntroduce(){ System.out.println("I am a Car"); } public void carRun(){ System.out.println(car.getName + " is running"); }}// 需要得到车辆run的信息我们再注入车辆public class getCarRunning{ public static void main(String[] args) { CarMessage carMessage = new CarMessage(); carMessage.carIntroduce(); //需要打印run信息 Car benz = new Benz(); carMessage.setCar(benz); carMessage.carRun(); }}
3.接口注入
将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供相应的注入方法。
public interface BuyCar{ void injectCar(Car car);}public class CarMessage implements BuyCar{ private Car car; public void injectCar(Car car){ this.car = car; } public void carRun(){ System.out.println(car.getName + " is running"); }}
通过接口注入需要额外声明一个接口,增加了类的数目,而且效果和属性注入没有本质区别,因此一般情况下不建议这种方式。
Spring-Ioc容器
上述代码中carMessage已经不需要关注Car实例的过程,它只要获取对应的Car实例,也就是说它已经把Car品牌的控制权给了第三方了,上诉的第三方代码还是我们写,而Spring把这些功能封装好,也就是我们所说的第三方Spring的Ioc容器。
现在比较知名的Ioc容器有Pico Container、Avalon 、Spring、JBoss、HiveMind、EJB等。
相关的Java技术
注入依赖技术是通过反射(Reflect)机制实现的。
- Spring(1)---IOC容器
- Spring Ioc容器(一)
- 自己实现Spring IoC容器(三)完成IoC容器
- Spring 原理学习-----IoC容器初始化(1)
- Spring框架-IOC容器和Bean的配置(1)
- 【Spring 核心】(1):IOC容器的实现
- Spring IOC容器的初始化过程(1)
- spring技术内幕1-IOC容器体系结构
- Spring源代码解析(一):IOC容器
- Spring源代码解析(一):IOC容器
- Spring源代码解析(一):IOC容器
- Spring源代码解析(一):IOC容器
- Spring源代码解析(一):IOC容器
- Spring源代码解析(一):IOC容器
- Spring源码分析----IoC容器(一)
- Spring源码分析----IoC容器(二)
- (二)spring 之IOC容器
- Spring源代码解析(一):IOC容器
- Android UI系列-----ScrollView和HorizontalScrollView
- readlink("/proc/self/exe", buf, count - 1);
- 建议91:可见字段应该重构为属性
- 浅谈Java设计模式之单例模式
- java中用UUID生成唯一标识ID
- Spring(1)---IOC容器
- C# 以MDF文件链接数据库
- C++代码实现指针图片旋转功能
- 半小时学会上传本地项目到github
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- Docker Image执行流程
- Android开发人员不得不收集的代码(持续更新中)
- 解读官方Android MediaPlayer API(2)
- 关于DONA的一些理解与解读