12-08
为什么不推荐使用 @Autowired
注解注入 bean?
@Autowired
注解是 Spring 提供的,如果使用了这个注解,那么就会和 Spring 框架产生了耦合,不利于代码的解耦。
12-07
Spring 自动装配有哪些方式?
Spring 自动装配有三种方式,分别是 byName
、byType
和 constructor
。
byName
:根据 bean 的名称进行装配,如果 bean 的名称和属性名称一致,那么就会进行装配。byType
:根据 bean 的类型进行装配,如果 bean 的类型和属性类型一致,那么就会进行装配。constructor
:根据构造器进行装配,如果 bean 的构造器参数类型和属性类型一致,那么就会进行装配。
12-6
Spring 装配是指什么?
Spring 装配是指创建应用对象之间协作关系的行为,Spring 通过依赖注入(DI)来进行装配。
12-5
Spring 怎么注入 Java 集合类型?
Spring 可以通过 util
命名空间注入集合类型,比如 List
、Set
、Map
等。
xml
<util:list id="list">
<value>1</value>
<value>2</value>
<value>3</value>
</util:list>
<util:list id="list">
<value>1</value>
<value>2</value>
<value>3</value>
</util:list>
12-4
Spring @Required 注解有什么用?
@Required
注解可以用在字段、方法和构造器上,用来检查 bean 的必需属性是否已经被设置。
如果设置了 required 属性为 true,那么当检查到 bean 的属性没有被设置时,会抛出 BeanInitializationException
异常。
12-3
Spring @Autowired 注解有什么用?
@Autowired
注解可以用在字段、构造器、方法和参数上,让 Spring 完成 bean 的自动装配工作。
默认按照类匹配的方式进行装配,如果匹配到多个 bean,那么会按照字段名或者参数名进行匹配。 使用 @Qualifier
注解可以指定 bean 的名称,从而避免歧义。
12-2
Spring bean 为什么默认为单例?
Spring bean 默认为单例,这是因为 Spring 容器中的 bean 默认都是单例的,这样做的好处是减少了创建 bean 的开销,节省了内存资源。
但是单例的 bean 也有一些缺点,比如线程安全问题,如果一个单例的 bean 中有一个成员变量,如果这个成员变量是可变的,那么就会出现线程安全问题。
12-1
请描述 bean 的作用域。
Spring 创建的 Bean 默认是单利的,每一个实例只会被创建一次,通过 getBean()
方法获取的是同一个实例。可以直接通过 scope 来制定一个 Bean 的作用域。
xml
<!-- 作用域:prototype -->
<bean name="accountDao" scope="prototype" class="com.zejian.spring.springIoc.dao.impl.AccountDaoImpl"/>
<!-- 作用域:prototype -->
<bean name="accountDao" scope="prototype" class="com.zejian.spring.springIoc.dao.impl.AccountDaoImpl"/>