21.什么是 Spring beans? Spring beans 是那些形成 Spring 应用的主干的 java 对象。它们被 Spring IOC 容 器初始化,装配,和管理。这些 beans 通过容器中配置的元数据创建。比如,以 XML 文件中 的形式定义。 Spring 框架定义的 beans 都是单件 beans。在 bean tag 中有个属性”singleton”, 如果它被赋为 TRUE,bean 就是单件,否则就是一个 prototype bean。默认是 TRUE,所以所有在 Spring 框架中的 beans 缺省都是单件。点击这里一图 Spring Bean 的生命周期。
-
一个 Spring Bean 定义 包含什么? 一个 Spring Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个 bean,它的生命周期详情及它的依赖。
-
如何给 Spring 容器提供配置元数据? 这里有三种重要的方法给 Spring 容器提供配置元数据。 XML 配置文件。 基于注解的配置。 基于 java 的配置。
-
你怎样定义类的作用域? 当定义一个 在 Spring 里,我们还能给这个 bean 声明一个作用域。它可以 通过 bean 定义中的 scope 属性来定义。如,当 Spring 要在需要的时候每次生产一 个新的 bean 实例,bean 的 scope 属性被指定为 prototype。另一方面,一个 bean 每 次 使 用 的 时 候 必 须 返 回 同 一 个 实 例 , 这 个 bean 的 scope 属 性 必 须 设 为 singleton。
-
解释 Spring 支持的几种 bean 的作用域 Spring 框架支持以下五种 bean 的作用域: singleton : bean 在每个 Spring ioc 容器中只有一个实例。 prototype:一个 bean 的定义可以有多个实例。 request:每次 http 请求都会创建一个 bean,该作用域仅在基于 web 的 Spring ApplicationContext 情形下有效。 session:在一个 HTTP Session 中,一个 bean 定义对应一个实例。该作用域 仅在基于 web 的 Spring ApplicationContext 情形下有效。 global-session:在一个全局的 HTTP Session 中,一个 bean 定义对应一个实 例。该作用域仅在基于 web 的 Spring ApplicationContext 情形下有效。 缺省的 Spring bean 的作用域是 Singleton。
-
Spring 框架中的单例 bean 是线程安全的吗?
不,Spring 框架中的单例 bean 不是线程安全的。 -
解释 Spring 框架中 bean 的生命周期 Spring 容器 从 XML 文件中读取 bean 的定义,并实例化 bean。 Spring 根据 bean 的定义填充所有的属性。 如 果 bean 实 现 了 BeanNameAware 接 口 , Spring 传 递 bean 的 ID 到 setBeanName 方法。 如 果 Bean 实 现 了 BeanFactoryAware 接 口 , Spring 传 递 beanfactory 给 setBeanFactory 方法。 如 果 有 任 何 与 bean 相 关 联 的 BeanPostProcessors , Spring 会 在 postProcesserBeforeInitialization()方法内调用它们。 如果 bean 实现 IntializingBean 了,调用它的 afterPropertySet 方法,如果 bean 声明了初始化方法,调用此初始化方法。 如 果 有 BeanPostProcessors 和 bean 关 联 , 这 些 bean 的 postProcessAfterInitialization() 方法将被调用。 如果 bean 实现了 DisposableBean,它将调用 destroy()方法。 点击这里一图 Spring Bean 的生命周期。
-
哪些是重要的 bean 生命周期方法? 你能重载它们吗? 有两个重要的 bean 生命周期方法,第一个是 setup , 它是在容器加载 bean 的时 候被调用。第二个方法是 teardown 它是在容器卸载类的时候被调用。 The bean 标签有两个重要的属性(init-method 和 destroy-method)。用它们你 可 以 自 己 定 制 初 始 化 和 注 销 方 法 。 它 们 也 有 相 应 的 注 解 ( @PostConstruct 和 @PreDestroy)。
-
什么是 Spring 的内部 bean? 当一个 bean 仅被用作另一个 bean 的属性时,它能被声明为一个内部 bean,为了 定义 inner bean,在 Spring 的 基于 XML 的 配置元数据中,可以在 或 元素内使用 元素,内部 bean 通常是匿名的,它 们的 Scope 一般是 prototype。
-
在 Spring 中如何注入一个 java 集合? Spring 提供以下几种集合的配置元素: 类型用于注入一列值,允许有相同的值。 类型用于注入一组值,不允许有相同的值。
-
什么是 bean 装配? 装配,或 bean 装配是指在 Spring 容器中把 bean 组装到一起,前提是容器需要知 道 bean 的依赖关系,如何通过依赖注入来把它们装配到一起。
-
什么是 bean 的自动装配?
Spring 容 器 能 够 自 动 装 配 相 互 合 作 的 bean , 这 意 味 着 容 器 不 需 要 和配置,能通过 Bean 工厂自动处理 bean 之间的协 作。 -
解释不同方式的自动装配 有五种自动装配的方式,可以用来指导 Spring 容器用自动装配方式来进行依赖注入 no:默认的方式是不进行自动装配,通过显式设置 ref 属性来进行装配。 byName:通过参数名 自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成 byname,之后容器试图匹配、装配和该 bean 的属性具有相同名字的 bean。 byType:通过参数类型自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成 byType,之后容器试图匹配、装配和该 bean 的属性具有相同类型的 bean。如果有多个 bean 符合条件,则抛出错误。 constructor:这个方式类似于 byType, 但是要提供给构造器参数,如果没有确定 的带参数的构造器参数类型,将会抛出异常。 autodetect:首先尝试使用 constructor 来自动装配,如果无法工作,则使用 byType 方式。
34.自动装配有哪些局限性? 自动装配的局限性是: 重写:你仍需用 和 配置来定义依赖,意味着总要 重写自动装配。 基本数据类型:你不能自动装配简单的属性,如基本数据类型,String 字符串,和类。 模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。
-
你可以在 Spring 中注入一个 null 和一个空字符串吗?
可以。 -
什么是基于 Java 的 Spring 注解配置? 给一些注解的例子 基于 Java 的配置,允许你在少量的 Java 注解的帮助下,进行你的大部分 Spring 配置而非通过 XML 文件。 以@Configuration 注解为例,它用来标记类可以当做一个 bean 的定义,被 Spring IOC 容器使用。另一个例子是@Bean 注解,它表示此方法将要返回一个对象,作为 一个 bean 注册进 Spring 应用上下文。点击这里学习 JAVA 几大元注解。
-
什么是基于注解的容器配置? 相对于 XML 文件,注解型的配置依赖于通过字节码元数据装配组件,而非尖括号的 声明。 开发者通过在相应的类,方法或属性上使用注解的方式,直接组件类中进行配置,而 不是使用 xml 表述 bean 的装配关系。
-
怎样开启注解装配? 注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在 Spring 配置文 件中配置 context:annotation-config/元素。
-
@Required 注解 这个注解表明 bean 的属性必须在配置的时候设置,通过一个 bean 定义的显式的属 性 值 或 通 过 自 动 装 配 , 若 @Required 注 解 的 bean 属 性 未 被 设 置 , 容 器 将 抛 出 BeanInitializationException。
-
@Autowired 注解 @Autowired 注解提供了更细粒度的控制,包括在何处以及如何完成自动装配。它 的用法和@Required 一样,修饰 setter 方法、构造器、属性或者具有任意名称和/ 或多个参数的 PN 方法。
-
@Qualifier 注解 当 有 多 个 相同 类 型 的 bean 却 只 有 一 个需 要 自 动 装 配 时 ,将 @Qualifier 注 解 和 @Autowire 注解结合使用以消除这种混淆,指定需要装配的确切的 bean。点击这 里学习更多常用注解。