初学Spring (春天)<1>
一、spring(春天) ----软件界的艺术品
1.spring是一个开源框架
2.spring是分层的java EE、一站式轻量级框架。
分层的java EE:
持久层: --mybatis
视图层: -- jsp /servlet
控制层: --servlet
一站式: java EE每层都有解决方案
轻量级:spring无侵入式 (低耦合,高内聚)
GA:General Availability,正式发布的版本,官方推荐使用此版本。在国外都是用GA来说明release版本的。
PRE: 预览版,内部测试版. 主要是给开发人员和测试人员测试和找BUG用的,不建议使用;
SNAPSHOT: 快照版,可以稳定使用,且仍在继续改进版本。
二、spring 核心
1)ioc di
2)aop
3)事务管理
4)webFlux --最新的mvc框架
三、IOC inverse Object cotroller 控制反转
(以前我们要自己new对象,现在spring帮我们new对象,以后我们需要对象,就找spring要)
以前:做鞋子--手工作坊 (自己new对象)
1、效率低
2、每个细节都要关注
3、成本高----人力 ,时间
现代:工厂 (spring bean工厂---new对象)
1、效率高
2、不需要关注每个细节,机器
3、成本低
ioc:控制反转
1.控制谁? 控制new 对象
2.反转什么? 反转new对象权利(程序员-->spring)
3.谁控制谁的反转? spring 控制new对象的权利 ,不再由程序员来控制
四、spring 中为什么叫bean工厂而不叫对象工厂?
1)对象 new Object(); 好比:女朋友
2)bean 对象-->具有生命周期的----bean 好比:老婆
五、spring bean工厂
1)不使用bean工厂模式
面向对象的六大原则:
- 单一职责原则——SRP
- 开闭原则——OCP
- 里式替换原则——LSP
- 依赖倒置原则——DIP
- 接口隔离原则——ISP
- 迪米特原则——LOD
开闭原则:系统/程序对修改关闭,对扩展开放
2)自己实现工厂----GOF 23设计模式 (单列模式,工厂模式)
1) 自己阅读工厂模式材料学习
2)开闭原则:对修改关闭,对扩展开发
1、简单工厂
1)不符合开闭原则 (反射)
2)要编写很多个工厂类
2、工厂方法模式
3、抽象工厂
3)spring bean工厂 (本质ioc容器)
你想让bean工厂帮你new对象,首先要告诉spring bean工厂需要产生什么对象?
1)导包
https://repo.spring.io/release/org/springframework/spring/
spring-beans-5.0.14.RELEASE.jar 支持bean工厂的包
spring-context-5.0.14.RELEASE.jar 支持context的包
spring-core-5.0.14.RELEASE.jar 支持spring的核心类的包
spring-expression-5.0.14.RELEASE.jar 支持spring表达式的包
spring-test-5.0.14.RELEASE.jar 支持spring单元测试
2)通过配置告诉spring bean工厂生产什么样的bean?
方式1:基于xml配置 (今天)
1)BeanFacotry 按需实例化
2) ApplicationContext 容器启动实例化所有的bean
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
注意:classpath:spring-beans.xml
WebApplicationContext 集成 mvc框架
方式2:基于注解配置
1、xml+注解配置
2、java+注解配置
方式3:基于java的配置
注意:需要再多导入一个包spring-aop-5.0.14.RELEASE.jar
1)AnnotationConfigApplicationContext
@Configuration
@Bean(name="redPig")
【注意】spring bean的底层就是用的反射技术来实例化bean
总结:IOC是一种思想,为了减轻程序员自己new对象工作,实现IOC
方式,第1是自己工厂类(使用工厂模式) 第2是自己使用spring 的bean
工厂。
六、Di dependency Injection 依赖注入 (给属性注入值)
1、set方法注入
2、构造方法注入
1)根据参数名进行注入

2)根据参数下标进行注入

3、注入数组、集合、map 等
4、bean的id和name属性 ,可以同时写getBean根据id获取bean,获取不到根据name来,name获取不到就报错
例子:
1)当参数为普通类型时直接可以引用:

2)当参数为引用类型时:
3)当参数为数组时:
4)当参数为集合时:
5)当参数为map时:
七、<bean>的属性
id/name bean的唯一标示
id是bean的唯一标示
id和name可以同时写 id是唯一标示 name别名
name也是bean唯一标示
class
建议:一般建议使用id指定bean的唯一标示
浙公网安备 33010602011771号