- Spring 概述
- Spring的特点
- IOC容器
- IOC底层原理
- IOC管理Bean ——工厂Bean(参考工厂模式)
- Bean的作用域
- Bean的生命周期
- Bean的自动装配:
- IOC操作Bean(基于注解)
- 注入属性注解:
- 注入属性注解:
定义:是j2ee应用程序框架,针对bean的生命周期进行管理的轻量级容器
**轻量级的定义:**jar包少,可以独立使用,不用依赖于第三方
spring提供的两个核心部分:IOC,AOP
IOC:控制反转,把创建对象的过程交给Spring管理
AOP:面向切面,在不修改源代码的前提下就能进行功能的扩增
Spring的特点-
方便解耦,简化开发
-
AOP面向切面
-
声明式事务管理
-
方便程序测试
-
方便集成各种框架
-
对JDBC进行了封装,方便进行事务的操作
-
Spring源码是非常经典的,很值得学习的
-
IOC底层原理
-
IOC接口
-
IOC操作Bean管理(基于XML)
-
IOC操作Bean管理(基于注解)
什么是IOC:就是控制反转,把对象的创建和对象之间的方法的调用过程交给spring管理
IOC的目的:解耦
IOC底层原理- XML解析技术,工厂模式,反射
-
工厂模式:
-
IOC底层原理(2):
1,XML配置文件,配置创建的对象
2,创建工厂类
-
IOC底层原理(3)
-
IOC思想基于IOC容器完成,IOC容器就是一个工厂
spring提供的两个接口:BeanFactory, ApplicationContext
BeanFactory:IOC基本实现,一般不提供给开发人员用
ApplicationContext:BeanFactory的子接口,开发人员一般都使用这个接口
两个接口的说明:
- 前者:加载配置文件时不会创建对象
- 后者:加载文件就创建对象,这说明在服务器启动完毕后,对象也就创建好了,这是它的优势
ApplicationContext的两个实现类:
FileSystemXmlApplicationContext(“盘符路径”)
ClassPathXmlApplicationContext(“src类路径”)
-
-
set方法注入的配置文件写法:
-
有参函数注入的配置文件写法:
-
xml注入其他属性:
>]]>> -
IOC注入外部Bean
-
IOC注入内部Bean
>
-
IOC注入集合
- Spring有两种Bean:普通Bean,工厂bean
普通bean特点:在xml中定义的类型就是返回的类型
工厂bean特点:在xml中定义的类型不一定是返回的类型,它可能充当工厂模式中工厂的作用
如何实现工厂bean:
- 创建类
- 实现beanFactory接口的方法
工厂bean的具体实现:
有了这个配置以后,利用classPathXMLApplicationContext() 和getBean获得这个对象,同时,在Java里边对应的类:MyBean,要实现BeanFactory这个接口
里边有一个方法:getObject(), 返回工厂Bean里边存放的对象
Bean的作用域bean的作用域指的是,创建的bean是单例的还是多例的,默认情况下是单例的
如何设置多实例:利用scope属性
解释:当scope = “sington” ,即默认情况,那么创建的bean就是单例的,当scope = “prototype”,创建的bean就是多例的
sington和prototype的又一个区别:当scope = “sington” ,则加载xml文件时就会创建一个对象,当scope=”prototype“时,是在调用getBean方法的时候才会创建一个对象
此外,scope还有request,session作用域,表示bean在request,session中作用,不常用
Bean的生命周期- 通过无参构造器创建bean实例
- 为bean属性设置值和其他bean引用(调用set方法)
- 调用bean初始化的方法(需要配置)
- bean可以使用了(对象获取到了)
- 当容器关闭是,调用了bean的销毁方法(需要配置)
此外,在3的前后分别还有两个动作:bean的后置处理器
添加后置处理器:
(1)创建类:实现BeanPostProcessor,实现后置处理器的两个方法: 1,postProcessorBeforeInitialization (在步骤3之前执行) 2.postProcessorBeforeInitialization (在步骤3之后执行)Bean的自动装配:
什么是自动装配:根据指定装配规则(属性名称或属性类型)
在xml中实现自动装配:
public class Myclass{
private Dep dep;
public setDep(Dep dep){
this.dep = dep;
}
}
此外,autowire还有一个value :“byType”,根据类型来自动装配,道理通byType
IOC操作Bean(基于注解)Spring针对bean管理中创建对象提供了注解:
-
@component
-
@service 多用于Service层
-
@controller 多用于Controller层
-
@Repository 多用于DAO层
解释:上述注解功能相同,都用来创建对象(bean实例)
使用注解来创建对象的步骤:
- 导入AOP依赖
- 开启组件扫描(告诉Spring什么类需要扫描)(可以用xml文件,也可以用注解方式代替xml文件)
- 在类上创建注解
用xml文件来组件扫描:
这个可以扫描service这个类,如果把service去掉,就扫描包下的所有类
组件扫描过滤:
- Autowire: 根据类型属性自动装配(byType)
- Qualifile:根据属性名称注入(byName)
- Resource: 可以根据类型和名称注入
- Value:注入普通类型
@value的使用方式:
@value(value = “abc”)
0429)]
[外链图片转存中…(img-jQJUVpZL-1651229580432)]
这个可以扫描service这个类,如果把service去掉,就扫描包下的所有类
组件扫描过滤:
[外链图片转存中…(img-cXzWUpXF-1651229580434)]
[外链图片转存中…(img-4dridEEo-1651229580435)]
注入属性注解:- Autowire: 根据类型属性自动装配(byType)
- Qualifile:根据属性名称注入(byName)
- Resource: 可以根据类型和名称注入
- Value:注入普通类型
@value的使用方式:
@value(value = “abc”)
private String name; 此时name的值就是abc



