首先,抛出一个问题,什么是 spring bean?

1) 它们是构成用户应用程序主干的对象。

2) Bean 由 Spring IoC 容器管理。

3) 它们由 Spring IoC 容器实例化,配置,装配和管理。

4) Bean 是基于用户提供给容器的配置元数据创建。

其次,spring 都提供了哪几种配置方式?

1)基于 xml 配置
        bean 所需的依赖项和服务在 XML 格式的配置文件中指定。这些配置文件通常包含许多 bean 定义和特定于应用程序的配置选项。它们通常以 bean 标签开头。例如:

<bean id="studentbean" class="org.edureka.firstSpring.StudentBean"><property name="name" value="Edureka"></property>
</bean>

2)基于注解配置

可通过在相关的类,方法或字段声明上使用注解,将 bean 配置为组件类本身,而不是使用 XML 来描述 bean 装配。默认情况下,Spring 容器中未打开注解装配。因此,您需要在使用它之前在 Spring 配置文件中启用它。例如:

<beans><context:annotation-config/><!-- bean definitions go here -->
</beans>

3)基于 Java API 配置
Spring 的 Java 配置是通过使用 @Bean 和 @Configuration 来实现。

@Bean 注解扮演与元素相同的角色。
@Configuration 类允许通过简单地调用同一个类中的其他 @Bean 方法来定义 bean 间依赖关系。
例如:

@Configuration
public class StudentConfig {@Beanpublic StudentBean myStudent() {return new StudentBean();}}

再次, spring作用域,支持集中 bean scope?

Spring bean 支持 5 种 scope:

1)Singleton - 每个 Spring IoC 容器仅有一个单实例。

2)Prototype - 每次请求都会产生一个新的实例,说明实例是在请求时创建的,而非在容器启动时创建,并且,容器不关心实例的回收,交由jvm垃圾回收器回收。

3)Request - 每一次 HTTP 请求都会产生一个新的实例,并且该 bean 仅在当前 HTTP 请求内有效。

4)Session - 每一次 HTTP 请求都会产生一个新的 bean,同时该 bean 仅在当前 HTTP session 内有效。

5)Global-session - 类似于标准的 HTTP Session 作用域,不过它仅仅在基于 portlet 的 web 应用中才有意义。Portlet 规范定义了全局 Session 的概念,它被所有构成某个 portlet web 应用的各种不同的 portlet 所共享。在 global session 作用域中定义的 bean 被限定于全局 portlet Session 的生命周期范围内。如果你在 web 中使用 global session 作用域来标识 bean,那么 web 会自动当成 session 类型来使用。
仅当用户使用支持 Web 的 ApplicationContext 时,最后三个才可用。

另外,给大家讲解下spring bean 容器的生命周期

spring bean 容器的生命周期流程如下:

1)Spring 容器根据配置中的 bean 定义中实例化 bean。

2)Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置。

3)如果 bean 实现 BeanNameAware 接口,则工厂通过传递 bean 的 ID 来调用 setBeanName()。

4)如果 bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用 setBeanFactory()。

5)如果存在与 bean 关联的任何 BeanPostProcessors,则调用 preProcessBeforeInitialization() 方法。

6)如果为 bean 指定了 init 方法(的 init-method 属性),那么将调用它。

7)最后,如果存在与 bean 关联的任何 BeanPostProcessors,则将调用 postProcessAfterInitialization() 方法。

8)如果 bean 实现 DisposableBean 接口,当 spring 容器关闭时,会调用 destory()。

9)如果为 bean 指定了 destroy 方法(的 destroy-method 属性),那么将调用它。

还有,什么是 spring 的内部 bean?

只有将 bean 用作另一个 bean 的属性时,才能将 bean 声明为内部 bean。为了定义 bean,Spring 的基于 XML 的配置元数据在或 中提供了元素的使用。内部 bean 总是匿名的,它们总是作为原型。

例如,假设我们有一个 Student 类,其中引用了 Person 类。这里我们将只创建一个 Person 类实例并在 Student 中使用它。

Student.javapublic class Student {private Person person;//Setters and Getters
}
public class Person {private String name;private String address;//Setters and Getters
}
bean.xml<bean id=“StudentBean" class="com.edureka.Student"><property name="person"><!--This is inner bean --><bean class="com.edureka.Person"><property name="name" value=“Scott"></property><property name="address" value=“Bangalore"></property></bean></property>
</bean>

再有,什么是 spring 装配

当 bean 在 Spring 容器中组合在一起时,它被称为装配或 bean装配。 Spring 容器,需要知道需要什么 bean 以及容器应该如何使用依赖注入来将 bean 绑定在一起,同时装配 bean。

另外, 自动装配有哪些方式?

Spring 容器能够自动装配 bean。也就是说,可以通过检查 BeanFactory 的内容让 Spring 自动解析 bean 的协作者

自动装配的不同模式:

1)no - 这是默认设置,表示没有自动装配。应使用显式 bean 引用进行装配。

2)byName - 它根据 bean 的名称注入对象依赖项。它匹配并装配其属性与 XML 文件中由相同名称定义的 bean。

3)byType - 它根据类型注入对象依赖项。如果属性的类型与 XML 文件中的一个 bean 名称匹配,则匹配并装配属性。

4)构造函数 - 它通过调用类的构造函数来注入依赖项。它有大量的参数。

5)autodetect - 首先容器尝试通过构造函数使用 autowire 装配,如果不能,则尝试通过 byType 自动装配。

最后, 自动装配有什么局限?

1)覆盖的可能性 - 您始终可以使用和设置指定依赖项,这将覆盖自动装配。

2)基本元数据类型 - 简单属性(如原数据类型,字符串和类)无法自动装配。

3)令人困惑的性质 - 总是喜欢使用明确的装配,因为自动装配不太精确。

Spring之beans详解相关推荐

  1. Spring Boot 配置文件详解

    2019独角兽企业重金招聘Python工程师标准>>> 第二篇 : Spring Boot配置文件详解 文章首发于微信公众号<程序员果果> 地址:https://mp.w ...

  2. Spring的lazy-init详解

    Spring中lazy-init详解 ApplicationContext实现的默认行为就是在启动服务器时将所有singleton bean提前进行实例化 (也就是依赖注入).提前实例化意味着作为初始 ...

  3. 《深入理解 Spring Cloud 与微服务构建》第十六章 Spring Boot Security 详解

    <深入理解 Spring Cloud 与微服务构建>第十六章 Spring Boot Security 详解 文章目录 <深入理解 Spring Cloud 与微服务构建>第十 ...

  4. 全面的Spring Boot配置文件详解

    全面的Spring Boot配置文件详解 Spring Boot在工作中是用到的越来越广泛了,简单方便,有了它,效率提高不知道多少倍.Spring Boot配置文件对Spring Boot来说就是入门 ...

  5. SpringMVC基础--spring MVC配置详解

    牧涛 --<-<-<@态度决定一切→_→... 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 171  文章- 3  评论- 79  spring MVC配置详解 现在主流的 ...

  6. Spring启动过程详解

    Spring启动过程详解 前言 spring容器启动过程 AnnotationConfigApplicationContext 有参数构造方法 无参数构造 AnnotatedBeanDefinitio ...

  7. Java Spring框架入门详解教程【多测师_何sir】

    Spring框架入门详解教程 spring概述 spring结构 spring IOC spring DI spring概述 Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多 ...

  8. Spring 生命周期详解

    Spring 生命周期详解 一.传统JAVA bean的生命周期 使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了. 一旦bean不再被使用,则由Java自动进行垃圾回 ...

  9. 关于事务管理的理解和Spring事务管理详解

    转载于:http://www.mamicode.com/info-detail-1248286.html 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000 ...

最新文章

  1. lucene 范围过滤
  2. ckeditor5加字数_ckeditor字数限制
  3. 【测绘程序设计】坐标正算神器V1.0(附C/C#/VB源程序)
  4. 图像锐化处理算法matlab,图像锐化matlab算法
  5. 浅析php学习的路线图
  6. react+redux+node报错Tapable.plugin is deprecated. Use new API on `.h ooks` instead
  7. 第一个Django页面
  8. Docker 安装 MongoDB教程
  9. SignalR循序渐进(三)简易的集群通讯组件
  10. Chapter 04-Using Conversion Functions and Conditional Expressions-Conditional Expressions
  11. wmsys.wm_concat的几个用法
  12. flutter环境配置详解及开发第一个项目
  13. 快速了解WordNet
  14. 解决AD不能导入CAD文件
  15. pdf、epub、mobi、三种下载方式区别
  16. 线程创建的三种方式和线程池创建的四种方式
  17. 模仿淘宝网的主页,实现了一些简单的功能
  18. 如何写一篇可实施的技术方案?
  19. html5火焰字体效果,CSS3文字特效属性text-shadow如何实现火焰文字的效果
  20. Elasticsearch语法知多少之Multi_match query

热门文章

  1. 计算机网络ip地址计算,知道IP地址怎么算网络地址? 网络地址的推算方法
  2. 英语作文 谈谈计算机1.我们已进入了计算机时代2.计算机有很多优点,The Computer(电脑时代)...
  3. java comparator接口类_常见的接口与类 -- Comparator
  4. ATM跨行取款的清算方式
  5. java虚拟主机地址,如何理解JAVA虚拟主机
  6. 微信置顶文案怎么制作?
  7. 概念 多路复用 到底是个啥?通俗易懂的理解
  8. 全国计算机二级真题第四套word,全国计算机二级office-word-历年真题
  9. Python中的常见6中数据结构
  10. 人人都在玩得人生重开模拟器,开源代码献上!