单例bean是单例模式吗
单例模式一般指在jvm中一个类只能构造出来一个对象。 spring中的单例bean也是单例模式只不过范围比较小,范围是beanName,一个beanName对应一个bean对象,不同beanName可以对应不同的bean对象
bean的实例化 和初始化有什么区别
springBean实例化 spring在创建对象是 通过类的构造方法创建一个对象
初始化指的是的 创建对象的过程中,执行对象中指定需要调用的方法
SpringAop是如何实现的 它和AspectJ有什么区别
spirngAop是通过动态代理 如果类实现了接口,生成的代理对象会继承同一个接口,如果没有实现接口,代理对象会继承bean 代理对象会在执行方法中增加一些基础的方法逻辑,如日志,权限等
AspectJ是实现Aop的一种方式,他是在编译期进行情调,通过注解的方式实现aop
Spring事务时如何实现的
a.spring事物是基于aop机制和数据可事务实现的
b.首先对于使用@Transactional注解的bean,Spring会创建一个代理对象作为bean
c.当调用代理对象的方法时首先会校验有没有@Transactional注解
d.如果加了,就会利用事务创建一个数据库连接
e.并且修改自动提交的属性,禁止此链接自动提交
f.然后执行当前方法,方法中会执行sql。
g.方法执行完之后没有异常,会提交事务
h.如果出现了异常,并且这个异常是需要回滚的事务,就回滚事务,否则提交事务。
如何理解spring事务的传播机制,底层如何实现?
一个线程在执行时,可能会连续调用好几个方法,在调用某个方法时就开启一个事务,在调用下一个方法时,是开启新事务,还是共用一个事务,这就是传播机制。 设置propagation 底层实现:根据注解配置,如果开启新事务,就会创建新的sql链接。
导致sping事务失效的原因
a.没加@configuration注解
b.方法自己内部调用自己的方法
c.方法时private, final的
e.单独的线程调用方法
f.异常被吃掉
g.类没有被spring管理
h.数据库不支持事务
SpringBean的生命周期
a.调用构造方法创建对象
b.设置属性值 也就是依赖注入
c.调用后置处理器 处理@PostConstruct注解
d.初始化 处理IntitalzingBean接口
e.调用后置处理器 进行aop
f.bean对象创建完成
Spring中的bean是线程安全的吗
看自己代码是如何写的,线程安不安全针对生命周期中的对象来说的,如果对象中没有共享的操作 就是线程安全的
ApplactionContext和beanFactory有什么区别
ApplactionContext本身就是beanFactory 他相对于beanFactory拥有其他的方法和属性
Spring容器启动流程
a.创建sping容器,sping启动时
b.扫描得到所有的需要创建对象的beanDefintion放在map中
c.筛选出单例的非懒加载的beanDefintion进行创建bean,就是创建bean的生命周期。多例bean是在创调用的时候创建的。
d.单例bean创建完成后,Spirng会发布一个容器启动事件
e.Spring启动结束
@SpringBootApplication有什么用
相当于配置了扫描@ComponenScan,扫描当前在的这个包路径
@EnableAutoConfiguration 自动将配置类导入到Spring容器中
@SpringBootConfiguration 表示当前类是配置类
作用:spingBoot扫描,导入自动配置类
12.SpringBoot启动过程做了什么事情
a.判断应用类型,不同应用类型会创建不同Spring容器
b.创建spring容器
c.解析启动类,扫描包,导入自动配置类解析
d.启动tommcat或者jetty
e.调用applicationRunner