1、对于Spring IoC的理解?
IoC控制反转,是一种设计思想,而不是一种具体的技术实现。IoC的思想是将原本在程序中手动创建对象的控制权,交给Spring框架来管理。
控制:对象创建的权力
反转:控制权交给外部环境(Spring框架,IoC容器)
2、什么是Spring Bean?
简单而言,Bean就代指那些被IoC所管理的对象。
3、将一个类声明为 Bean 的注解有哪些?
@Component:通用注解,可将任意类标注为Spring组件。
@Repository:对应持久层,即dao层,主要用于数据库相关操作。
@Service:对应服务层。主要涉及一些复杂的逻辑,需要用到dao层。
@Controller:对应于Spring MVC控制层,主要用于接受用户请求并调用Service层返回数据给前端页面。
4、 @Component、@Bean有什么区别?
5、注入Bean的注解有哪些?
Spring内置的@Autowired以及JDK内置的@Resource和@Inject都可以用于注入bean。
@Autowired和@Resource使用更多。
6、@Autowired 和 @Resource 的区别是什么?
@Qualifier
注解来显式指定名称,Resource可以通过name属性来显式指定名称。7、Bean的作用域有哪些?
singleton:IoC容器中只有唯一的bean实例。Spring中的bean默认单例。
prototype:每次获取都会创建一个新的bean实例。
request(仅Web应用可用):每次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
session(仅Web应用可用):每次来自 新session的HTTP请求都会产生一个新的bean,仅在当前应用启动时间内有效。
websocket(仅Web应用可用):每次websocket会话产生一个新的bean。
使用注解@Scope或xml文件的scope属性配置作用域
8、Bean是线程安全的吗?
主要取决于其作用域和状态。prototype每次产生新的bean实例,不存在线程安全问题。singleton可能会存在资源竞争问题,主要取决于bean是否有状态(有状态bean是指包含可变的成员变量的对象),如果有状态就存在线程安全问题。
对于有状态的线程安全问题,常用的两种解决办法:
9、Bean的生命周期?
阶段一:Bean的实例化和依赖注入:根据bean的定义 和一些信息配置来实例化bean
阶段二:检查Spring Awareness,如果Bean实现了*.Aware接口 ,就调用相应的set方法
阶段三:创建bean生命周期回调
阶段四:销毁bean生命周期回调:如果实现了销毁的接口,就会将bean销毁
整理自JavaGuide