spring
Spring:
Spring是一个开源框架,它由[Rod Johnson](https://baike.baidu.com/item/Rod Johnson)创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
导一个spring-webmvc相当于导了 前面4个jar依赖
ioc的推导
例如:
没有用ioc之前
privateUserdao userdao=new UserDaoImpl();
public void save(){
userdao.save();
}
调用业务层调用控制层的方法
在业务层中应该写 Userdao userdao=new UserDaoImpl();
假如我有另一个类的也实现了Userdao接口,而我想用另一个方法时,就要改new 的实现类,因为需求而频繁的改代码
如此循环下去。。。。。,修改代码的成本台昂贵了
相当于没有用ioc之前,控制权在程序员手中
用了ioc之后
private Userdao userdao;
public setUserdao(Userdao userdao){
this.userdao=userdao;
}
没有用ioc/di之前
测试类1:
public static void main(String[] args){
Uservice uservice=new userviceimpl();
uservice.save();
1.修改业务层中的new的实现类
}
用了ioc/di之后
测试类1:
public static void main(String[] args){
Uservice uservice=new userviceimpl();
( Uservice)uservice.setUserdao(new mysqldaoimpl);
本质的区别:用了ioc/di之后,我们就可以随时改变实现类,完成不同的需求,但不需要改代码
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716232131681.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716232143547.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021071623344358.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716232212922.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
## 实例化构造方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716232236910.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716232322533.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716232322171.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
## 整合所有的xml配置文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716232322533.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021071623232281.png#pic_center)
## bean 的作用域
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716232728789.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
## scope范围
1.singleton单例模式(默认)
2.prototype非单例模式
- [博客园](https://www.cnblogs.com/)
- [首页](https://www.cnblogs.com/wk-missQ1/)
- [新随笔](https://i.cnblogs.com/EditPosts.aspx?opt=1)
- [联系](https://msg.cnblogs.com/send/WK_BlogYard)
- [订阅](javascript:void(0))
- [管理](https://i.cnblogs.com/)
# [谈谈你对Spring IOC和DI的理解,以及它们的区别](https://www.cnblogs.com/wk-missQ1/p/12547397.html)
### 谈谈你对Spring IOC 和 DI的理解,以及它们有什么区别?
**IOC是什么?**
IOC--Inversion of Control,即**控制反转**,不是什么技术,而是一种设计思想.IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.
**IOC的优势是什么?**
IOC是一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合,更优良的程序,传统的应用程序都是由我们在类的内部主动创建依赖对象,从而导致类与类之间的高耦合,有了IOC容器之后,把创建和查找依赖对象的控制权交给了IOC容器,由容器进行注入组合对象,所以**对象和对象之间是松耦合**的.
**DI是什么?**
DI--Dependency Injection,即**依赖注入**,组件之间依赖关系由容器在运行期决定,即由容器动态的将某个依赖关系注入到组件当中,依赖注入的目的并非为软件系统带来更多的功能,而是为了提升组件重复使用的频率,并为系统搭建一个灵活可扩展的平台,通过依赖注入我们只需要使用简单的配置,而不需要任何代码就可以指定目标需要的资源,完成业务逻辑,而不需要关心具体的资源来自何处,由谁实现的.
**IOC--控制反转的通俗解释:**
所谓的IOC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西给你,同时也把你交给其他需要你的东西,所有的类的创建,销毁都是由spring来控制,也就是说控制对象的生命周期不再是引用它的对象,而是spring,对于某个具体的对象而言,以前是它控制其他对象**,而现在所有的对象都由spring控制,所以这就叫控制反转**.
**DI--依赖注入的通俗理解:**
如果程序中A需要依赖B才能正常进行,而这时候B不是自己创建的而是**由spring容器注入给A的**,spring会在适当的时候创建B,然后像打针一样注入给A,所以依赖注入的名字就是这么来的.那么**DI是如何实现的呢?**Java 1.3之后一个重要的特征就是**反射(reflection)**,它允许程序在运行的时候动态的生成对象,执行对象的方法,改变对象的属性,spring就是通过反射来注入的.
**谁依赖了谁?**当然是应用程序依赖于IOC容器;
**为什么需要依赖?**应用程序需要IOC容器来提供对象需要的外部资源;
**谁注入谁?**IOC容器注入应用程序某个对象,应用程序依赖的对象;
**注入了什么?**注入某个对象所需要的外部资源(包括对象,资源,常亮数据);
**IOC和DI有什么关系?**
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FrpHO2wF-1626448544716)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210714191311151.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QAimy7EH-1626448544718)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210714193506499.png)]
DI依赖注入:3种方式
1.构造器注入
2.set注入
3.自定义如c标签或者p标签
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233028882.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233047856.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233047759.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233047608.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233047344.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233047193.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233047168.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021071623304754.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233155760.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233155675.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233155608.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233155522.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233155489.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716233155312.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfemhvbmdfcm9uZw==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021071623315583.png#pic_center)
|