spring家族
spring 简化开发
spring boot在spring的基础上加速开发
spring cloud 分布式开发
spring 5.0 jdk8以上+配置+注解
Spring Framework
Core Container 核心容器
AOP 面向切面编程
Aspects AOP思想实现
Data Access 数据访问
Data Interation 数据集成
Transactions
Web Web开发
Test 单元测试 和集成测试
学习方法
核心容器--数据访问--面向切面--Transactions
IOC 控制反转
主动new产生对象转换为外部提供对象,该过程中对象创建控制权由程序转移到外部
Spring 提供容器 为IOC容器来当那个外部
IOC容器负责对象创建和初始化 被创建和被初始化的对象统称为Bean
DI 依赖注入
在容器中建立Bean 和 Bean之间的依赖关系 的过程 叫做依赖注入
充分解耦
IOC管理bean
在IOC容器中有依赖关系的bean进行关系绑定
创建配置文件前先导坐标
1.导入spring的坐标spring-context
2.配置bean
bean标签表示配置bean
id 属性标示给bean起名字
class 属性表示给bean定义类型
注:bean定义id在同一个上下文不能重复
3.获取IOC容器
4.获取bean
ApplicationContext
DI方面
5.删除业务层中使用new的方式创建的dao对象
6.提供对应的set方法
7.service中配置service和dao的关系
propety表示配置当前bean的属性
name属性表示配置哪一个具体的属性
ref表示参照哪一个bean
bean的别名
属性 name = “名称1 名称2 名称3”
scope (bean默认为单例){ prototype非单例}
bean的创建方式
1.构造方法
spring创建bean时调用无参构造方法
spring报错信息从下往上看
无参构造方法如果不存在将抛出异常BeanCreationException
2.静态工厂(了解)
factory-method “什么方法”
3.实例工厂
(1) 造工厂实例对象
(2) factory-method “什么方法”factory-bean“在哪里”
4.使用FactoryBean实例化
FactoryBean<UserDao>
isSingleton 控制:是不是单例
bean的生命周期
初始化
创建对象
执行构造方法
执行属性注入
执行bean初始化方法
init-method
销毁 (销毁前关闭容器)
destoy-method
close() 暴力关闭
registerShutdownHook()关闭钩子
2接口控制bean生命周期
setting注入
依赖注入方式
1.setter注入
<property name="属性" value="值">
2.构造器注入
构造方法
配置中
constructor-arg name=“参数名”ref=“”
由于害怕构造方法改名字
将name去掉改为 type=“字符串类型”
由于担心数据类型重复 直接将type改为 index 也就是将参数位置标明
强制依赖用构造器注入
可选依赖用setter注入 灵活性强
Spring倡导构造器注入
自己开发模块推荐用setter注入
注解开发
@Compont(“名称”)
<context:component-scan base-package="路径">
@Service 业务层
@Reository 数据层
纯注解开发
利用Java类代替配置文件
@Configuration
@ComponentScan("路径1","路径2")
容器获取
AnnotationConfigApplicationContext
控制单例模式
@Scope(“单例”)
控制生命周期
@PostConstruct
public void init()
@PreDestroy
public void destrop()
依赖注入
自动装配
@Autowired 按类型装配 暴力反射
@Qualifier("名称") 名称装配
AOP
面向切面编程 如何组织程序结构
在不惊动原始设置的基础上为其进行功能增强
Spring理念:无入侵式/无侵入式
连接点 连接点范围大于切入点
切入点: 匹配连接点的式子 @Pointcut("execution(void org.example.dao.UseDao.update())")
通知:在切入点处执行的操作
切面: 通知和切入点的关系
通知类 定义通知的类
@Component spring控制的bean
@Aspect 告诉spring这是 aop
@Before("sb()") 绑定通知和切入点的关系 sb为定义的切入点
在配置类中加入
@EnableAspectJAutoProxy 告诉spring用注解开发的
工作流程
Spring容器启动
读取所有切面配置中的切入点
初始化bean 判定bean对应的类中的方法是否匹配到任意切入点
匹配失败 创建对象
匹配成功 创建原始对象 的代理对象
获取bean执行方法
获取bean 调用方法并执行 完成 操作
获取bean是代理对象时 根据 代理对象的运行模式
aop对tostring进行了重写 代理对象 代理模式
切入点表达式
进行增强的方法的描述方式
动作关键字(访问修饰符 返回值类型 包 类 方法名 参数 异常)
通配符 描述切入点 快速描述
*
..
+