spring基本概念

什么是spring?

轻量级开源的J2EE框架。它是一个容器框架,用来装javabean,中间层框架,可以起到一个连接的作用,让企业级开发更快更简洁。
spring是一个轻量级的控制反转(IOC)和我面向切面(AOP)的容器框架。
 

对IOC和AOP的理解

通常认为spring有两大特性IOC和AOP;
IOC
IOC表示控制反转;在程序运行是用的是具体的UserService对象、OrderService对象,这些对象的创建,对象属性的赋值都是spring做的即为控制,控制对象的创建,控制对象内属性的赋值;如果不用Spring我们自己来做这两件事,反过来我们用Spring这两件事就不用我们做了,我们需要做的仅仅是定义类,以及定影哪些属性需要Spring来赋值,即为反转,表示一种对象控制权的转移;总结一下IOC表示控制反转,表示如果用Spring,那么Spring会来负责创建对象,以及对象内的属性赋值,也就是如果采用Spring,那么对象的控制权会转交给Spring。
AOP
将程序中的交叉业务逻辑(例如安全,日志,事务等),封装成一个切面,然后注入到目标对象中去。AOP可以对某个对象或者某些对象的功能进行挣钱,比如对象中的方法增强,可以在执行某个方法之前额外做一些事情,在某个方法执行后做一些事情。
 

BeanFactory和ApplicationContext

ApplicationContext是BeanFactory的子接口;ApplicationContext提供更完整的功能:①继承了MessageSource,支持国际化;②统一的资源文件访问方式;③提供在监听器中注册bean的事件;④同时加载多个配置文件;
BeanFactory采用的是延时健在形式来注入Bean的,只有当使用到某个Bean时才会对Bean进行加载实例化,无法发现一些Spring的配置问题。
ApplicationContext在容器启动时就一次性穿件了所有的Bean。有利于检查所需依赖是否注入。
BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式来创建,如使用ContextLoader。
 

单例Bean和单例模式

单例模式是指JVM中某个类的对象只存在唯一一个;
而Spring单例是指一个Spring Bean容器(ApplicationContext)中仅有一个实例。
 

Spring事务传播机制

REQUIRED(Spring默认事务传播类型):如果当前没有事务,自己创建一个事务,如果有当前存在事务则加入;
SUPPORTS:当前存在事务,则加入当前事务,如果当前事务不存在,则以非事务方法执行;
MANDATORY:当前存在事务,则加入当前事务,当前事务不存在,则抛出异常;
REQUIRES_NEW:创建一个新事物,如果存在当前事务,则挂起该事务;
NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则挂起当前事务;
NEVER:不使用事务,如果当前事务存在,则抛出异常;
NESTED:如果当前事务存在,则嵌套事务中执行,否则REQUIRED的操作一样。
 

Spring事务什么时候会失效

spring事务的原理是AOP,进行了切面增强,那么失败的根本原因就是因为AOP不起作用;
1.发生自调用,类中使用this调用本类(this通常省略),此时这个this对象不是代理类,而是UserService对象本身;
2.方法不是public的,@Transactional只能作用于public的方法上,否则事务不会失效,如果要用在非public方法上,可以开启AspectJ代理模式;
3.数据库不支持事务;
4.没有被spring管理;
5.异常被吃掉,事务不会回滚。
 

Spring Bean的生命周期

实例化
1.根据Bean的配置情况,实例化一个Bean;
属性赋值
2.对对象中加了@Autowired注解的实行进行属性填充;
初始化
3.回调Aware方法,例如BeanNameAware,BeanFactoryAware;
4.调用BeanPostProcessor的初始前的方法;
5.调用初始化方法;
6.调用BeanPostProcessor初始化方法后的方法,在这里会进行AOP
7.若果被当前创建的bean是单例的则会把bean放入单例池;
8.使用bean
销毁
8.spring容器关闭时电泳DisposableBean中的destory()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值