Spring框架基础知识

Spring框架基础知识笔记

Spring中bean的生命周期 ,指Bean从创建、初始化、使用到销毁的整个过程。
Bean实例化->依赖注入->Aware接口的回调->BeanPostProcessor前置处理->初始化方法->BeanPostProcessor后置处理->Bean使用->Bean销毁

循环引用(Circular Dependency)是指两个或多个Bean互相依赖,导致无法完成依赖注入的情况。BeanA的构造器依赖BeanB,而BeanB的构造器依赖BeanA;或者是BeanA有一个属性依赖于BeanB,而BeanB也有一个属性依赖于BeanA。这种循环依赖通过Spring的一级、二级、三级缓存机制是可以解决的。

java 复制代码
@Component
public class BeanA {
    @Autowired
    private BeanB beanB;

    public BeanA() {
    }

    public void setBeanB(BeanB beanB) {
        this.beanB = beanB;
    }
}

@Component
public class BeanB {
    @Autowired
    private BeanA beanA;

    public BeanB() {
    }

    public void setBeanA(BeanA beanA) {
        this.beanA = beanA;
    }
}
java 复制代码
@Component
public class BeanA {
    @Autowired
    @Lazy
    private BeanB beanB;
}

在spring框架中,使用注解singleton,一般是Scope注解代表bean可以在IOC容器中作为单例,使用prototype则一个bean可以定义多个实例。

而bean并不属于线程安全的范畴。有状态的都不安全(可修改)。

AOP 是面向切面编程,也就是可以重用的模块,多次重复使用的方法进行封装,降低耦合问题。@Around("pointcut()")。(如日志记录)。

事务@Transaction)是为了确保一组操作在数据库中是原子性的(是一个不可分割的整体,所有操作要么都执行,要么都不执行),要么所有操作成功并提交,要么任何一个操作失败时,全部回滚,保持数据一致性。分为声明式事务管理编程式事务管理。事务失效的情况,一般就是抛出异常出问题。

java 复制代码
@Service
public class MyService {
    @Transactional
    public void someTransactionalMethod() {
        // 数据库操作
    }
}
java 复制代码
// propagation 传播行为(REQUIRED当前方法必须在事务中运行),isolation 事务之间的隔离程度,timeout 事务执行最长时间,readOnly 只读
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, timeout = 30, readOnly = false)
public void updateData() {
    // 更新数据库的操作
}

MVC框架M odel处理数据和业务逻辑,V iew负责展示数据和用户界面,Controller协调模型和视图,处理请求和返回响应。

相关推荐
明月_清风1 小时前
加密解密系统完全指南:原理剖析与 Go 实践
后端
方也_arkling1 小时前
【Java-Day08】static / final / 枚举
java·开发语言
橙淮1 小时前
Spring Bean作用域与生命周期全解析
java·spring
Chengbei112 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1122 小时前
web-第一次课后作业
java·开发语言·idea
秋92 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本2 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
DIY源码阁2 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
冬奇Lab3 小时前
每日一个开源项目(第105篇):Twenty - 跳出 Salesforce 的圈套,定义现代开源 CRM
前端·后端·开源
basketball6163 小时前
C++ NULL 和 nullptr 区别 以及 nullptr 的核心实现
java·开发语言·c++