Spring教程笔记(3) Bean

时间:2023-02-03 21:47:27

Bean配置项

id class必须项

如果根据id来获取bean,要写id;如果根据类型来配置bean,只写class就可以。

scope作用域 constructor arguments  properties

Autowiring Mode自动装配模式

懒加载模式

初始化和销毁方法

Bean作用域 scope=“”

5种类型:

1. 单例 singleton:一个bean容器中只有一份 默认方式

2.prototype:同一个bean容器,每次请求创建一个新实例重新new一个,自动垃圾回收,destroy无效

打印this.hashCode()可以区分是否同一个实例

以下3个都和web有关

3. request,每次http请求创建一个新实例,当前request有效

4. session,每次http请求创建一个新实例,当前session有效

5. global session,web中同session;porlet里面有global session的概念

Bean生命周期

定义 xml

初始化 IOC容器启动时生成实例

  (1)配置init-method  在xml定义bean时加上 init-method=“init或者其他名字不用加括号”  会自动调用class你写的类的init方法

  (2)实现InitializingBean接口,覆盖其afterPropertiesSet方法  不用写init-menthod=“”

    public class 你写在class=的类名 implements InitializingBean

    {

    @Override

    public void afterPropertiesSet throws Exception(){}

    }

使用  从bean容器中取出实例并使用

销毁 bean容器停止时销毁此容器创建的所有实例

  (1)配置destroy-method="cleanup stop或者什么名字"   也得是class里面的方法

  (2)实现DisposableBean接口,覆盖其destroy方法。

配置全局bean的初始化和销毁方法:xml最外层<beans default-init-method="xxx不用加括号"   defauzheliangglt-destroy-method="xxx"></beans>

而且,就算default-这两个方法不写实现code,也不会报错。

优先级:接口方法  执行顺序先于  init/destroy-method  ,有前俩的任一个,default会被覆盖掉不生效(default)。

Aware接口

一些以Aware为结尾的接口,实现这类接口的bean在被初始化之后,可以获取相应的资源。但要慎重!

ApplicationContextAware:要覆盖setApplicationContext(ApplicatoinContext applicationContext)方法

BeanNameAware:要覆盖setBeanName(String arg)方法

getBean()返回一个object

Bean自动装配 Autowiring

不用在xml bean声明properties或constructor-arg

<beans 里面写default-autowire="byName byType constructor之类的"

几种autowiring:

(1)no  default

(2)byName 在class=“”类里面自动找和bean id相同的属性名装配。beanid重复的话,容器启动失败。

(3)byType   在class=“”类里面自动找和bean相同类型的属性,如果多个能匹配上的会抛出异常  没找到能匹配上的就什么都不做装配失败

(4)constructor 和byType类似,找和构造器参数类型一样的bean,如果没有找到和构造器参数一致的bean,抛出异常。

Resources资源文件的统一接口

ResourceLoader 加载resource的类,所有ApplicationContext都实现了ResourceLoader接口,

其中getResource方法,参数为String location,返回值为Resource

location可以是 classpath: file: url: 或者无前缀