SpringIOC学习笔记

前言

这是基于B站大佬 狂神说,然后写的学习笔记。

一:MVC三层架构

V(View):视图层 ->JSP
C(Controller):控制层 ->Servlet
M(Model):模型层(操作数据) ->JavaBean实体类 JDBC (Service+Dao)

为了维护方便,Servlet的部分功能拆给了Service(login layout 查询全部用户)
Dao(CRUD)

二:IOC理论指导

①Dao接口 ②Dao接口实现类UseDao
在这里插入图片描述
在这里插入图片描述
③Service接口 ④Service接口实现类UseService
在这里插入图片描述
在这里插入图片描述
⑤测试类
在这里插入图片描述
结果:在这里插入图片描述

发现:如果用户不想用这个这个Dao层接口实现类,想要用其他的Dao层接口实现类需要改④中的图所示的地方,若是一直改来改去 会发现特别特别的麻烦
改进方案:利用set接口实现动态输入方式在这里插入图片描述
在这里插入图片描述
这种思想从本质上解决问题,程序不再主动管主动对象,而是被动的接受对象。大大降低系统的耦合性,可以更加专注在业务上,这就是IOC的原型!!!!!(也就是利用set方法)!!

IOC控制反转是一个设计思想,DI(依赖注入)是实现IOC的一种方法

对于面向对象编程,对象创建由程序自己控制,经过控制反转后,
将对象创建转移给第三方,也就是获取依赖对象方法反转了。

对于IOC方式:xml配置(xml方法配置Bean) ->定义和实现分离
+注解 ->定义和实现一体
+零配置(Bean定义,注解形式定义在实现类中)

控制反转是通过描述(XMl配置和注解)并且通过第三方(用户)去生产或获取特定对象的方式。
在Spring实现控制反转的是IOC容器,其实现方式是DI(依赖注入)

三:写一个程序

一:编写实体类在这里插入图片描述
二:编写Spring容器文件,命名为beans.xml
在这里插入图片描述
三.测试在这里插入图片描述
对于IOC理论的例子 进行改进:
多加了编写Spring配置文件在这里插入图片描述
测试类在这里插入图片描述
能得到同样的结果

四:创建对象的方式+Spring配置(别名+导入)

一:一般来说默认是无参构造创建对象
二:使用有参构造创建对象(构造器注入),下面将有三种方式 使用实体类中的有参构造方法
①.实体类在这里插入图片描述
②.Spring配置文件在这里插入图片描述
③测试在这里插入图片描述

三:Spring配置(别名+导入)
别名: 在这里插入图片描述
导入:在这里插入图片描述

五:依赖注入+④Bean作用域

注入->①构造器(即有参创建对象方式)+②set方法+③扩展方法
-> Constructor Property Constructor(C命名)+Property(P命名)
①构造器注入(Constructor)
②set方法注入(Property)
例子:1.Class Address 在这里插入图片描述
Class Student(Set Get toString就不截图了)在这里插入图片描述
}

2.Spring配置文件beans.xml在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.测试在这里插入图片描述
4.结果在这里插入图片描述
在这里插入图片描述

③扩展方法方法(PropertyP空间+ConstructorC空间)
1.实体类在这里插入图片描述
在这里插入图片描述
2.beans.xml在这里插入图片描述
3.测试在这里插入图片描述
4.结果在这里插入图片描述
④bean作用域在这里插入图片描述

六:自动匹配:对实体类中的成员变量(其他类)进行自动装配-无注解版

1.Cat 类 在这里插入图片描述
Dog类在这里插入图片描述
People类在这里插入图片描述
2.Spring配置文件 beans.xml和beans2.xml分别对应两种自动匹配autowired在这里插入图片描述
在这里插入图片描述
3.测试类在这里插入图片描述
ByName是需要匹配bean的id,所以要保证id要唯一
例如:Dog对应bean id必须为dog
ByType 是需要匹配bean的class,所以要保证class唯一 也就是如果有两个bean用的同一个class,例如:

也就是不止一个的时候,无法判断出要自动匹配导致无法自动匹配、

七:自动装配:注解版

Cat类在这里插入图片描述
Dog类在这里插入图片描述
1.@Autowired [set get方法可以不写,但是配置文件的Bean是必须要写的]
①ByType(默认)
People类 在这里插入图片描述
Spring配置文件在这里插入图片描述
测试类在这里插入图片描述结果在这里插入图片描述
②ByName 则需要借助@Qualifier(value=”bean的id”)
People类在这里插入图片描述
Spring配置文件在这里插入图片描述
测试和结果 同上
2.@Resource 对于这个需要导入一个依赖
ByName(默认),若是ByName找不到,则会找到ByType实现
People类在这里插入图片描述
Spring配置文件在这里插入图片描述
测试在这里插入图片描述
结果在这里插入图片描述
3. .@Nullable,可以说明这个字段可以为null
4. 结论@Autowried和@Resource的set方法可以不写
[set get方法可以不写,但是配置文件的Bean是必须要写的]

使用注解开发:可以取代XML中bean对象的创建和其属性的注入
首先要理清楚一点:@Autowried和@Ressource是取代其他类在该类的引用的注入
下面将见识到如何使用如何取代XML中还有的bean对象创建和其属性的注入
@Component @Value 还有@Scope

Cat类-@Component(默认是类名-首字母小写) 也就是cat在这里插入图片描述
Dog类在这里插入图片描述
People类在这里插入图片描述
Spring配置文件在这里插入图片描述
测试在这里插入图片描述
结果在这里插入图片描述

知识补充:衍生注解业务层 Dao层 @Repository
Service层 @Service
Controlled层 @Controller
这三个注解 跟@Component作用是一样的
而@Component一般是用于普通pojo(实体类)的使用

结论:最佳用途XML用来管理Bean 而注解只完成属性的注入
XML维护方便,万能 写起来复杂
注解维护困难,不是自己类不能用 写起来简单

八:通过JavaConfig配置(不使用XML)

1.pojo实体类在这里插入图片描述
2.JavaConfig类在这里插入图片描述
3.测试类在这里插入图片描述

知识复习图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值