Q1 bean的id 和 name有何异同?
答:同:
1 都是作为bean的名称
2 都可以指定多个名字
异:
1 id有命名规范,而name可以用特殊字符
2 配置文件不允许出现两个相同id的bean,但是可以出现相同name的bean
Q2 Spring 支持哪些依赖注入的方式?
1 属性注入
(a 依赖注入时,Spring检查是否有对应的setter方法)
(b 命名要求:变量的前两个字母要么全部大写,要么全部小写)
2 构造函数注入
(a 按类型匹配入参 )
(b 按索引匹配入参 )
(c 通过自身类型反射匹配入参)
(3 接口注入:不推荐使用)
(4 工厂方法注入:不推荐使用)
(5 字段注入)
Q4 比较不同的依赖注入方式
构造函数注入优点:
1 保证一些重要属性在bean实例化时就设置好
2 不需要setter方法,减少类的方法个数
3 封装性更好
构造函数注入缺点:
1 如果属性多,则可读性差
2 有些属性可选的情况下,依然要设置null值
3 循环依赖问题
Q5 列举spring的自动装配类型
注:xml配置方式很少启用自动装配功能(default-autowire=no);而基于注解的配置方式默认采用byType。
1 byName 根据名称
2 byType 根据类型
3 constructor 如果在构造函数中找到某类型的入参,则将这个bean装配
4 autodetect 根据bean的自省机制选择byType或者constructor
Q6 谈谈bean中可注入哪些参数。
1 字面值:可用字符串表示的值
处理特殊字符的方法:
(1)<![CDATA[]]>
(2)用转义序列表示
2 引用容器中的其他bean
3 内部bean
范围被默认为prototype
4 null值
5 级联属性
6集合类型属性
Q7 bean之间有哪些关系?
1 继承
2 依赖
3 引用
Q8 Spring bean之间的继承和java类中的继承有什么区别?
1、Spring 中的子bean 和父bean 可以是不同类型,但在Java 中的,子类是对父类的加强,是一种特殊的父类。
2、Spring 中bean 的继承是实例之间的关系,主要表现为参数值的延续:而Java 中的继承是类与类之间的关系,主要表现为方法及属性的延续。
3、Spring 中子bean 不可作父bean 使用,不具备多态性:而Java 中的子类实例完全可当成父类实例使用。
Q9 bean有哪几种作用域?说明不同。