1、Spring是如何创建一个Bean对象的?
2、什么是单例池?作用是什么?
一个用来存放bean对象的Map集合,Map的key为bean的名字,value为完成实例化的Bean
3、Bean对象和普通对象的区别是什么?
4、依赖注入是怎么实现的?
5、@PostConstruct注解是如何工作的?
6、Bean的实例化和初始化的区别是什么?
实例化:
初始化:
7、推断构造方法是什么意思?
推断构造方法:
AbstractAutowireCapableBeanFactory.
1)applicationContext.getBean(UserService.class,args),参数args是用来推断构造方法的。
2)一个bean有一个无参的构造方法,也有一个有参数的构造方法,默认调用的是无参的构造方法,如果想默认走有参的构造方法,可以再有参的构造方法上增加一个@Autowired注解
3)如果有多个构造方法都是有@Autowired注解的有参构造方法,会报错
4)构造方法是在BeanPostprocessorBeanFactory中查找到的
5)如果只有一个无参的构造方法,查找构造方法时,会返回空,最后使用无参的构造方法创建对象。
6)如果有构造方法了,没有指定值,那就先根据类型再根据名称查找值。如果制定了值,可能会有类型转换。
7)多个构造方法比较时,权重小的优先级高
8、Bean的初始化是如何工作的?
9、单例Bean和单例模式之间有什么关系?
10、什么是先Bytype再byName?
11、SpringAOP底层是怎样工作的?
12、Spring底层事务是怎样工作的?
1、Spring创建代理对象
2、扫描事务方法上是否存在@Transactional注解
3、数据库的连接创建交给Spring 事务管理器
4、设置autocommit = FALSE
5、执行业务逻辑,根据是否异常确定是commit或rollback
13、同类方法调用为什么会事务失效?
Spring事务是基于AOP的,当代理对象调用事务方法时,代理对象中存在一个普通对象(target),其实真正的业务方法时由这个target去调用,当同类方法调用相当于this调用,也就是target调用,不存在事务。