Bean相关

Bean容器初始化:

本地文件是绝对路径,classpath是相对路径。例子如下:

Bean配置项:

常用Bean的配置项:

(1)id :在整个IOC容器中,这个bean的唯一标识

(2)class :具体要实例化的某一类,与id对应

(3)scope :bean的作用域

(4)constructor-arg :构造器的参数

(5)properties :某个类的属性

(6)autowiring mode :自动装配模式

(7)lazy-initialization mode :懒加载模式

(8)initialization/destruction method :初始化和销毁方法

从bean容器中要得到某一个实例,有两种方式,一种是通过id获取,一种是通过类型,也就是class获取。

Bean的作用域:

图解:

一个Bean容器:也就是在一个context中,而不是在两个context中去比较实例化对象。

singleton :默认模式

prototype :每次请求获取对象,容器都会创建一个新的实例返回,当不再使用这个对象时,自动被垃圾回收器回收,destroy不生效。

global session :portlet主要用于应用的集成,例如,有OA系统,有HR系统,有财务系统,在一个企业内部,通常不会每个系统都去分别登录,而是做一个port,在这个port里,会把每个系统常用的功能都列在里面,这个port会和所有的系统做单点登录,登录这个port后,可以点击其中任意一个系统都可以登录,也就是在不同的系统中的所拥有的不同的session的作用范围。

判断是否是同一个实例的方法,查看hashCode,测试方法可如下:

详细解析singleton:

Bean的生命周期:

Bean的生命周期:

(1)定义:也就是xml配置文件中配置的bean

(2)初始化:也就是IOC容器在加载的时候,初始化,生成bean的实例

(3)使用:开发中使用某一个bean的实例

(4)销毁:在bean容器停止的时候,销毁这个容器创建的所有实例

针对某一个bean的方法:

  初始化的两种方式:

  (1)实现org.springframework.beans.factory.InitializingBean接口,覆盖afterPropertiesSet方法

  (2)配置init-method

  销毁的两种方式:

  (1)实现org.springframework.beans.factory.DisposableBean接口,覆盖destroy方法

  (2)配置destroy-method

(2)以配置的方式实现,xml配置如下:

具体bean实现:

(1)实现接口的方式,xml正常配置即可,不用配置init和destroy,只需要在具体bean实现中实现相关接口即可,相关代码如下:

配置全局默认初始化、销毁方法:

xml配置文件如下:

具体bean的实现:

总结:

当同时配置以上三种初始化和销毁方式时,实现接口的初始化方法要最先执行,其次是内部配置的初始化方式,然而全局默认的配置方式并不会执行,也就是会被覆盖。而当配置全局默认的配饰方式时,bean具体实现中可以不用实现相对应的初始化和销毁方法,而内配配置的初始化方式,其初始化和销毁方法不能省去。

Aware接口:

spring中提供了一些以aware结尾的接口,实现了aware接口的bean在被初始化之后,可以获取相应资源,所谓资源指以aware结尾的接口,例如beanNameAware,它可获取的相关资源就是beanName相关的;

通过aware接口,可以对spring相应资源进行操作(需慎重,因为获取到的资源可能是IOC容器中非常核心的内容,例如得到了ApplicationContext,执行了它的destroy方法);

为对spring进行简单的扩展提供了方便的入口;

举例:

ApplicationContextAware:它会向实现了这个接口的bean提供ApplicationContext,并且实现了这个接口的bean必须配置到spring的配置文件中,并且由spring的容器去加载

BeanNameAware:它会提供有关BeanName定义的内容

ApplicationEventPublisherAware:用于事件的发布

BeanClassLoaderAware:找到相关的类加载器

Bean的自动装配---xml配置autowire实现:

前面介绍了Spring注入的两种方式:设值注入和构造器注入。

这里利用Bean的自动装配可以省略配置文件中的很多细节。

具体配置文件三种方式可如下进行:

而其具体的bean的实现跟正常情况下一致即可。

原文地址:https://www.cnblogs.com/cing/p/7413253.html