樹形圖:
一、Spring框架種的單例bean是線程安全嗎?
@Service
@Scope("singleton")
public class UserServiceImpl implements UserService{
}
singleton:bean在每個Spring IOC容器中只有一個實例
protype:一個bean的定義可以有多個實例
Spring框架中的單例bean不是線程安全的
@Scope:
答案:不是線程安全的
Spring框架中有一個@Scope注解,默認的值就是singleton,單例的。
因為一般在spring的bean中都是注入無狀態的對象,沒有線程安全問題,如果在bean中定義了可修改的成員變量,是要考慮線程安全問題的,可以使用多例或者加鎖來解決
二、Spring的bean的生命周期
能了解:Spring容器時如何管理和創建bean實例
方便調試和解決問題
(1)BeanDefinition
Spring容器在進行實例化時,會將xml配置的<bean>的信息封裝程一個BeanDefinition對象,Spring根據BeanDefinition來創建Bean對象,里面由很多的屬性來描述Bean
beanClassName:bean的類名
initMethodName:初始化方法名稱
properryValues:bean的屬性值
scope:作用域
lazyInit:延遲初始化
1、通過BeanDefinition獲取bean的定義信息
2、調用構造函數實例化bean
3、bean的依賴注入
4、處理Aware接口(BeanNameAware、BeanFactoryAware、ApplicationContextAware)?
5、Bean的后置處理器BeanPostProcessor-前置
6、初始化方法(InitializingBean、init-method)
7、Bean的后置處理器BeanPostProcessor-后置
8、銷毀bean