Bean的本质就是Java中的类,而Spring中的Bean其实就是对实体类的引用,来生产Java类对象,从而实现生产和管理Bean 。
Spring容器支持两种格式的配置文件 Properties 文件 XML文件
在配置文件中,通常一个普通的Bean只需要定义id(或name)和class 两个属性即可,定义Bean的方式如下所示:
Bean的实例化
在面向对象的程序中,想要使用某个对象,就需要先实例化这个对象。同样,在Spring中,要想使用容器中的Bean,也需要实例化Bean。实例化Bean有三种方式,分别为构造器实例化、静态工厂方式实例化和实例工厂方式实例化(其中最常用的是构造器实例化)。
Bean的装配方式
创建Spring配置文件beans2.xml,并配置工厂类Bean(这里添加了 factory-method)
实例工厂与静态工厂区别在于是否有static关键词修饰
Bean的作用域Spring 4.3中为Bean的实例定义了7种作用域,如下表所示:
常用的只有singleton和prototype
singleton是Spring容器默认的作用域,当Bean的作用域为singleton时,Spring容器就只会存在一个共享的Bean实例。singleton作用域对于无会话状态的Bean(如Dao 组件、Service组件)来说,是最理想的选择。
(1条消息) spring 中属性scope 的prototype(有状态)和singleton(无状态)_xueyepiaoling的博客-CSDN博客https://blog.csdn.net/xueyepiaoling/article/details/6107624JAVA-sesion的状态会话与无状态会话_redis (sohu.com)https://www.sohu.com/a/335592822_100109711
singletonSpring容器可以管理singleton作用域的Bean的生命周期在此作用域下,Springi能够精确的知道该Bean何时被创建,何时初始化完成,以及何时被销毁。
prototype作用域的Bean,Spring只负责创建,当容器创建了Bean实例后,Bean的实例就交给客户端代码来管理,Spring容器将不再跟踪其生命周期。
Bean的生命周期 BeanNameAware接口由想要在豆工厂中了解其豆名称的 bean 实现。
BeanFactoryAware接口将由希望了解自己拥有的BeanFactory的bean实现。
ApplicationContextAware接口由任何希望收到运行它的 ApplicationContext 的通知的对象实现。
BeanPostProcessor允许自定义修改新 Bean 实例的工厂挂钩,例如检查标记接口或使用代理包装它们。
InitializingBean接口将由 BeanFactory 设置所有属性后需要做出反应的 bean 实现。例如,执行自定义初始化,或者仅用于检查是否已设置所有必需属性。
定制的初始化方法 BeanPostProcessor允许自定义修改新 Bean 实例的工厂挂钩,例如检查标记接口或使用代理包装它们。
基于Annotation的装配 @Autowired 是Spring的注解,Spring属于第三方的;根据类型注入
@Resource 是JDK的,J2EE是Java自己的东西。根据名称注入 @Service("userService") @Resource("userService")
通过包扫描的形式来配置一个包下的所有Bean:



