spring常见的面试题,面试问spring是什么
Yyds干货库存
专长:全栈工程师、爬虫、ACM算法
微信官方账号:浅谈知识
这次都替他拿,下次跟面试官PK
温馨提醒:这个面试官太残忍了。
spring创建bean时如何调用构造函数?创建spring的过程称为推理构造法。
它分为以下几种情况:
未实现构造函数。
默认情况下,类将创建一个无参数构造函数。类实现无参数构造函数。
创建bean时,您将调用自己的无参数构造函数。类定义无参数构造函数和无参数构造函数。
创建Bean时,调用无参数构造函数。类中定义了无参数构造函数。
如果没有定义无参数构造函数,我们不会自动创建无参数构造函数,直到有一个,然后在spring中没有无参数构造函数的情况下调用无参数构造函数(当然这是在只有一个无参数构造函数的前提下)。该类中定义了多个参数化构造函数。
会报错,因为spring没有无参数的构造函数不知道调用哪个,也可以把@Autowire加到你想用的构造函数里,
对于带参数的构造函数,我们可以根据它们的类型去容器中查找参数。如果按类型不止一个,我们可以按名字查。如果他们根据名字找不到任何错误,我们可以创建它们。我们在创建它们的时候,可能会有一个循环依赖的问题,然后我们引入spring的三级缓存来解决循环依赖。spring为什么用三级缓存而不是二级缓存创建bean?为什么首先要有一个缓存?因为没有缓存,所以当存在循环依赖时,没有办法解决循环依赖的问题。
现在看到这个问题,对三级缓存在bean创建过程中的作用有了一定的了解。
为什么不用二级缓存?
如果生成的bean不需要生成代理对象,就只能使用二级缓存,但是如果需要生成代理对象,就需要进行三级缓存更改,因为如果我们没有二级缓存,那么创建的对象就在三级缓存中,其他bean在创建的时候就注入到当前bean中,因为检测到当前bean有AOP,就会让当前bean生成代理对象。但是,如果有多个其他bean要注入到当前bean中,则会生成当前bean的代理对象,所以需要二级缓存来存储当前存储在三级的bean的代理对象。当其他bean需要注入当前bean时,可以直接从二级缓存中取出。
春天的@懒标注是什么意思?这个注释的含义在不同的地方是不一样的,所以会分不同的情况来讨论。
@懒的在班上装饰
该对象在启动时不会被创建,只有在实际使用时才会被创建。@懒
A级
公共静态void main(String[] args) {
}
}@Lazy是在@Bean注释的方法上修饰的。启动时不会创建bean对象,但使用时会创建由@Bean修饰的方法返回的对象。@配置
A级
@Bean
@懒
public B get(){
返回新的B();
}
}
B类{
}@Lazy放在@Autowired注释的属性上。它将只分配一个代理对象,而不是给修饰属性分配一个实值。当这个属性被实际使用时,它将返回到容器并找到一个匹配的对象。@组件
A级
@自动连线
@懒
私B b
}
@组件
B类{
}总结以上是春天三个问题的总结,希望有所帮助。
版权归作者所有:来自博客的原创作品,转载授权请联系作者,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。