Skip to content

12-08

为什么不推荐使用 @Autowired 注解注入 bean?

@Autowired 注解是 Spring 提供的,如果使用了这个注解,那么就会和 Spring 框架产生了耦合,不利于代码的解耦。

12-07

Spring 自动装配有哪些方式?

Spring 自动装配有三种方式,分别是 byNamebyTypeconstructor

  • byName:根据 bean 的名称进行装配,如果 bean 的名称和属性名称一致,那么就会进行装配。
  • byType:根据 bean 的类型进行装配,如果 bean 的类型和属性类型一致,那么就会进行装配。
  • constructor:根据构造器进行装配,如果 bean 的构造器参数类型和属性类型一致,那么就会进行装配。

12-6

Spring 装配是指什么?

Spring 装配是指创建应用对象之间协作关系的行为,Spring 通过依赖注入(DI)来进行装配。

12-5

Spring 怎么注入 Java 集合类型?

Spring 可以通过 util 命名空间注入集合类型,比如 ListSetMap 等。

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"/>