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 {@Autowiredprivate BeanB beanB;public BeanA() {}public void setBeanB(BeanB beanB) {this.beanB = beanB;}
}@Component
public class BeanB {@Autowiredprivate BeanA beanA;public BeanB() {}public void setBeanA(BeanA beanA) {this.beanA = beanA;}
}
java">@Component
public class BeanA {@Autowired@Lazyprivate BeanB beanB;
}
在spring框架中,使用注解singleton
,一般是Scope
注解代表bean可以在IOC容器中作为单例,使用prototype
则一个bean可以定义多个实例。
而bean并不属于线程安全的范畴。有状态的都不安全(可修改)。
AOP是面向切面编程,也就是可以重用的模块,多次重复使用的方法进行封装,降低耦合问题。@Around("pointcut()")
。(如日志记录)。
事务(@Transaction
)是为了确保一组操作在数据库中是原子性的(是一个不可分割的整体,所有操作要么都执行,要么都不执行),要么所有操作成功并提交,要么任何一个操作失败时,全部回滚,保持数据一致性。分为声明式事务管理和编程式事务管理。事务失效的情况,一般就是抛出异常出问题。
java">@Service
public class MyService {@Transactionalpublic void someTransactionalMethod() {// 数据库操作}
}
java">// propagation 传播行为(REQUIRED当前方法必须在事务中运行),isolation 事务之间的隔离程度,timeout 事务执行最长时间,readOnly 只读
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, timeout = 30, readOnly = false)
public void updateData() {// 更新数据库的操作
}
MVC框架:Model处理数据和业务逻辑,View负责展示数据和用户界面,Controller协调模型和视图,处理请求和返回响应。