spring学习笔记(3) - spring bean

1.spring中bean的作用域有哪些(spring支持多少种scope)

(1)singleton

代表单例,ioc容器中只创建一个bean对象,每次获取的都是同一个

(2)prototype

不是单例,每次都会从容器中拿到一个新的bean对象

2.spring中的单例bean的线程安全问题了解吗(状态)

在多线程并发环境下,多个线程对同一个bean对象中的非静态变量进行写操作的时候,

就会发生线程安全的问题。

解决方式:尽量在bean中不创建非静态变量;另一种方式是使用threadlocal(具体见csdn收藏),threadlocal是jdk.java.lang下的类,为变量在每个线程中都创建一个副本,每个线程可以访问自己内部的变量副本,不会和其他线程的局部变量冲突,实现线程间的数据隔离。

3.将一个类声明为spring的bean的注解有哪些

@component

@service

@repository

@controller

4.@component和@bean的区别

@component标注在类上,通用的注解,当不知道该对象属于哪层时就用该注解;

@bean标注在方法上,主要创建第三方库中的类的bean对象,将其注入到ioc容器中交给spring管理;

5.spring中的bean的生命周期

(1)创建过程:

调用构造函数实例化bean,设置bean的属性;

根据实现的aware接口设置依赖信息;

- aware接口是为了感知到自身的属性,在bean中设置对容器的感知,beannameaware 接口知道自己在容器中的名字

调用后置处理器的前置初始化方法完成初始化前的自定义逻辑;

调用afterpropertiesset方法做属性被设定后的自定义事情;

调用bean自身的初始化方法;

调用后置处理器的后置初始化方法完成初始化后的自定义逻辑;

(2)bean初始化完成,使用

(3)销毁过程:

如果实现了disposablebean的destroy方法,则调用 ;

如果实现了bean自身的销毁方法,则调用。

6.spring怎么解决循环依赖问题

spring对循环依赖的处理有三种情况;

(1)构造器的循环依赖:处理不了,抛异常

(2)非单例的循环依赖:处理不了

(3)单例下的set循环依赖:三级缓存处理

前提:单例对象初始化分三步:通过构造器实例化对象 - 填充属性 - 调用自身定义的初始化方法。循环依赖主要发生在第一,第二步,构造器循环依赖和属性循环依赖。

问题:a的属性依赖b对象,b的属性依赖a对象。

解决:三级缓存

三级-singletonfactories-存放bean工厂对象;

二级-earlysingletonobject-存放原始bean对象;

一级-singletonobjects-存放完全初始化好的bean,从缓存中取出bean可以直接使用。

具体解决:

a首先进行初始化第一步,实例化,将自己放入1,a发现自己需要b,b实例化,在123中找a,在3找到,将自己放入1

7.spring的内部bean了解吗

将一个bean用作另一个bean的属性时,将这个bean声明为内部bean;

8.spring的装配是什么

bean在spring容器中组合在一起的时候,叫做bean装配。可以进行自动装配,byname\bytype

9.自动装配有什么局限

普通类型无法自动装配;

有覆盖的可能,<property>或<constructor-arg>设置指定依赖会覆盖自动装配

10.spring中出现同名bean怎么办

(1)同一个配置文件中出现同名bean以最上面定义的为准;

(2)不同配置文件中出现同名bean,后解析的配置文件会覆盖先解析的配置文件;

(3)同文件中componentscan和bean出现同名,bean的生效;componentscan优先级低

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值