Spring容器

更多内容参见个人技术博客,无广告欢迎关注

(1)什么是Spring容器?

Spring容器(Spring框架中的一个模块)帮我们创建对象、并且管理对象之间依赖关系。

 

(2)如何启动Spring容器?

step1.导包。

mavan所有的包都可以在 https://mvnrepository.com/ 中找到,并且有示例

<dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-webmvc</artifactId>

  <version>3.2.8.RELEASE</version>

</dependency>

step2.添加Spring配置文件。

 

配置文件用来告诉容器,如何创建对象、如何建立对象之间的依赖关系等等。

 

 

 

step3.启动容器。

/*

* 启动Spring容器。

* ApplicationContext是一个接口,定义了Spring

* 容器的基本功能。

* ClassPathXmlApplicationContext是一个实现了

* ApplicationContext接口的类,该类会依据类路径

* 来查找Spring配置文件,然后启动容器。

*/

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

System.out.println("context:"  + context);

 

(3)创建对象

1)方式一 使用无参构造器。

step1.为类添加无参构造器(或者缺省构造器)。

step2.在配置文件当中,使用bean元素进行配置。

使用无参构造器创建对象。其中,id属性值要求唯一,class属性要写类的完整的名字。

<bean id="stu1" class="first.Student"/>

step3.启动Spring容器,调用容器提供的getBean方法来获得对象。

Student stu = ac.getBean("stu1",Student.class);

 

2)方式二 使用静态工厂方法。(了解)

使用静态工厂方法来创建对象

factory-method属性用来指定静态方法名,容器会调用该类的静态方法来创建对象。以下配置,容器会调用Calendar.getInstance()方法,该方法会返回一个对象。

<bean id="cal1" class="java.util.Calendar" factory-method="getInstance"/>

 

3)方式三 使用实例工厂方法。(了解)

使用实例工厂方法来创建对象。

factory-bean属性值是一个bean的id,factory-method属性指定方法名。

以下配置,容器会调用id为cal1的bean的getTime方法。

注:bean指的是由容器所管理的对象。

<bean id="time1" factory-bean="cal1" factory-method="getTime"/>

 

(4)作用域

容器默认情况下,对于某个bean元素,只会创建一个实例。

可以修改bean的作用域,将作用域设置为"prototype",容器就会创建多个实例。

scope属性用来设置bean的作用域。缺省值是"singleton",只会创建一个实例;

如果值为"prototype",则会创建多个实例(每调用一次getBean方法,就会创建一个)。

singleton:单例。

prototype:原型。

<bean id="sb1" class="basic.ScopeBean" scope="prototype"/>

 

(5)生命周期

容器在创建好相应的对象之后,会调用该对象的初始化方法,在销毁该对象之前,会调用该对象的销毁方法。

可以使用init-method属性和destroy-method属性来指定初始化方法和销毁方法的名称。

init-method属性用于指定初始化方法名。

destroy-method属性用于指定销毁方法名。

注:容器在删除对象之前,会先调用该对象的销毁方法。 只有作用域为singleton的bean,销毁方法才会执行。

<bean id="ms1" class="basic.MessageService" init-method="init" destroy-method="destroy" scope="singleton"/>

 

(6)延迟加载

默认情况下,容器启动之后,会将所有作用域为"singleton"的bean实例化。

可以将lazy-init属性值设置为true,容器启动之后,不再创建这些实例了(只有调用了getBean方法才会创建) 

lazy-init属性用来设置是否延迟加载,如果值为true,表示延迟加载。

<bean id="lb1" class="basic.LazyBean" lazy-init="true"/>

原文地址:https://www.cnblogs.com/wood-life/p/10288315.html