spring 黑马入门

注解 替代 xml 标签

传统web开发的困惑

  1. 层与层之间耦合比较紧密,比如业务里面创建数据库对象,操作

  2. 通用的事务功能耦合

解决思路:找第三方创建对象

beanfactory快速入门

bean工厂
在beans.xml中配置bean,bean的id还有class

然后创建工厂对象,读取xml,获取对应id的bean
DI 依赖注入,添加setUserDao接收注入的对象,修改beans.xml,在配置set的名称

ApplicationContext 快速入门

bean容器
封装了beanfactory,更后期的接口
拓展了beanfactory,拓展了监听功能,国际化功能等
又继承了bf,又维护了bd的引用

区别
原始bf:在getbean的时候,才会创建bean对象
ac,容器一创建,就讲bean都实例化并初始化好

常用Application,

  1. ClassPathXmlApplication
  2. FileSystemXml
  3. Annotation

基于XML方式Bean的配置

默认使用id,然后就是name,最后才是全限定名。没有id的话,name的第一个就是id
scope类型为singleton,单例模式,加载完配置文件创建后一直在,如果为prototype,那就是getbean才创建,不会存到单例池

lzay-init ,get的时候创建,然后放到单例池

创建方法,销毁方法
在这里插入图片描述

指定关闭方法
在这里插入图片描述

另一种初始化方法,实现InitializingBean接口

实例化-》属性设置-》afterpropertieseSet-》初始化方法

bean实例化流程

在这里插入图片描述
spring的bean工厂后处理器

bean的生命周期

实例化 将singleton的bean通过反射进行实例化
初始化 对bean实例的属性进行填充,以及执行Aware接口方法,执行BeanPostProcessor方法,执行InitializingBean接口的初始化方法,执行自定义初始化init方法等
完成阶段 存储到单例池 singletonObjects中

初始化阶段

循环依赖问题
简单来说就是 A依赖B,B依赖A。
就是使用三级缓存方案,完整的bean存到一个位置,半成品的bean存到一个位置

singletonObjects,一级缓存,完整Bean
earlySingletonObject,二级缓存 ,被引用的半成品
singletonFactory,三级缓存,未被引用
举个例子

生命周期
在这里插入图片描述

标签与注解对应

在这里插入图片描述
下面三个实质上就是component,名字不同,好区别不同层
在这里插入图片描述
一般使用Autowired,优先根据类型,次根据名称
Resource使用很少
在这里插入图片描述
如果注解加在字段上,通常Autowird和Qualifier配合使用,解决有多个同类型bean的问题
如果加在方法参数上,可以省略Autowired
在这里插入图片描述

AOP

AOP配置的两种语法:
advisor,通过实现接口来确认通知的类型
aspect,通过配置确认通知的类型,更加灵活

基于AOP的声明式事务控制

以转账为例
编程式事务控制: 在转账方法中,手动管理事务,开始时调用connection.setAutoCommit(false),执行扣款和入账操作后,根据结果决定调用commit()或rollback()。


try {
    connection.setAutoCommit(false);
    // 扣款操作
    // 入账操作
    connection.commit();
} catch (Exception e) {
    connection.rollback();
}
声明式事务控制: 通过@Transactional注解管理事务,无需手动控制。

@Transactional
public void transferMoney(Account from, Account to, BigDecimal amount) {
    // 扣款操作
    // 入账操作
}

在这里插入图片描述

spring 整合 web 环境

javaweb三大组件

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值