Bean的配置
spring容器支持XML文件(最常用)和Properties文件两种格式的配置文件。
- xml配置文件的根元素是,它包含了多个子元素,一个子元素定义了一个Bean。
Bean的实例化
有三种方法:
- 构造器实例化(最常用)
- 静态工厂实例化
创建工厂类,在类中定义静态方法(class和factory-method) - 实例工厂实例化
采用直接创建Bean实例的方式,在配置文件中,通过factory-bean属性配置一个实力工厂,然后使用factory-method属性确定使用工厂中的哪个方法。
Bean的作用域
spring 4.3 中为Bean定义了7中作用域:
- 在使用prototype作用域时,spring容器会为每个对该Bean的请求都创建一个新的实例。(在spring配置文件中,同样使用元素的scope属性,将Bean的作用域定义为prototype)
- singleton作用域对于无会话状态的Bean来说是最理想的选择。
Bean的生命周期管理
- Spring容器可以管理singleton作用域的Bean的生命周期,在此作用域下,Spring能够精确的知道该Bcan何时被创建,何时初始化完成,以及何时被销毁。
- prototypc作用域的Bean,Spring只负责创建,当容器创建了Bean实例后,Bean的实例就交给客户端代码来管理,Spring容器将不再跟踪其生命周期。
一个实例:
package com.itheima.life;
public class Life {
//构造方法,也就是实例化
public Life(){
System.out.println("life start" );
}
//初始化方法
public void initMethod(){
System.out.println("initMethod start" );
}
//销毁方法
public void destroyMethod() {
System.out.println( "destroyMethod start");
}
}
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<!--scope="singleton"这个值是默认,在默认情况下spring能够全程跟踪bean的生命周期-->
<bean id="life" class="com.itheima.life.Life" init-method="initMethod" destroy-method="destroyMethod”/>
</beans>
测试类:
package com.itheima.life;
import org.springframework.context.support.ClassPathxmlApplicationContext;
public class LifeTest {
/**声明周期执行流程示例:
*
*实例化
*初始化方法
*消费方法
*/
public static void main(String[] args) {
//定义配置文件路径
string xmlPath="com/itheima/life/life.xml";
//ClassPathxmlApplicationContext在加载配置文件时,对Bean进行实例化
ClassPathXmlApplicationContext context = new ClassPathxmlApplicationContext(xmlPath);
//ClassPathxmlApplicationContext提供了关闭容器的方法,这样bean的销毁方法才会被调用
context.close();
}
}
Bean的装配方式
spring容器支持多种形式的Bean的装配方式,如:基于XML装配、基于注解(Annotation)的装配<最常用>和自动装配。
- 基于XML的装配(可能会导致XML配置文件过于臃肿),两种方式:构造注入,设值注入。设值注入必备以下条件:
- Bean类必须有一个无参构造方法
- Bean类必须为属性提供setter方法
- 在配置文件中,使用元素为每个属性注入值
使用构造注入: - Bean类必须提供带所有参数的有参构造方法
-
基于Annotation的装配
-
自动装配
自动装配就是将一个Bean自动注入到其他bean的Property中;spring的元素中包含一个autowire属性,可以通过设置autowire属性值来自动装配Bean。下面是autowire属性的5个值:
代码后续再补充