一、Spring概述

维护性、扩展性和性能
维护性:在程序需要优化、更改、修复时,维护方便,更改代码量少
扩展性:在原来代码的基础上,不断的增加代码的同时,又可以不修改原来的代码(高内聚,低耦合)
性能:减少了代码量,提高了开发效率

内聚和耦合
内聚是指模块内的内容需要设计统一在模块内部
耦合分为高耦合和低耦合
高耦合:类和类之间紧密结合,修改某个组件会对其他类有影响,例如数据的添加、删除、修改等功能写在一起时,修改组件会影响相关的类
低耦合:修改某个组件类不会对其他组件类有影响,减少了类与类之间的联系

二、入门实例

1、引入spring核心jar
image.png
2、编写spring的配置文件,声明交由spring来管理创建组件(Java的类)对象
image.png
3、编写测试类,创建spring容器,获取容器中管理的组件
image.png

原理:读取xml获取class的值,然后通过反射创建对象

maven引入一个jar包自动引入其他依赖包(每个jar包都会有pom文件:依赖包的信息)

三、Spring容器

spring容器是由spring创建出来的在内存中的一块区域,用来存放spring创建和管理的Bean
image.png

四、Ioc

控制反转,将对象的创建和管理权限交给了第三方容器(spring容器)

步骤:
1、对象创建由spring完成
2、需要依赖的对象,由spring的配置完成(依赖注入Dependence Injection)

五、配置标签

Bean标签配置:
1、spring容器启动默认会自动创建bean对象(该对象根据标签配置的类创建)
2、spring默认会以单例模式创建bean对象,如果不是单例模式,容器启动的时候不会创建对象,而是调用getBean的时候创建
3、作用域(scope):
singleton(单例-默认)——调用的bean对象是同一个
prototype(多例-原型对象)——调用的bean对象不一样
request(每个request对象中唯一)——在web项目中
session(每个session对象中唯一)——在web项目中
4、通过设置延迟加载可以将单例对象创建时间放到getBean的时候(lazy-init=”true”)

Bean生命周期:
诞生、运行、消亡
1、对象实例化(创建对象)
2、属性初始化
3、如果当前组件实现BeanNameAware接口,则会调用bean命名方法
4、如果当前组件实现ApplicationContextAware接口,则会执行注入spring父容器方法
5、如果有组件实现BeanPostProcessor(全局)接口,则会执行前置初始化方法
6、如果当前组件实现InitializingBean接口,则会执行afterPropertySet方法
7、执行本类自定义初始化方法(init-method=”方法名”)
8、如果有组件实现BeanPostProcessor(全局)接口,则会执行后置初始化方法
9、执行业务逻辑
10、执行全局销毁方法
11、执行本类销毁方法(当单例模式下且容器关闭时调用——destroy-method=”方法名”)

六、依赖注入

1、通过setter注入
bean标签内部添加property标签,property标签的属性name为组件类的字段,value为注入的值
2、通过构造方法注入,默认调用无参构造方法
根据类型指定调用关系
bean标签内部添加constructor-arg标签 使用属性索引对应添加的字段,索引值必须与组件类中的有参构造的属性对应,使用value属性注 入,亦可以使用ref属性注入其他类

注入集合数据方式:
image.pngimage.png

获取properties文件的键值对
读取配置文件创建一个配置对象
location 指定文件位置
classpath:xx 在类路径下查找文件
image.png
image.png