树形图:
一、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