美文网首页
Spring IOC容器入门(一)

Spring IOC容器入门(一)

作者: alexwu59 | 来源:发表于2019-04-01 18:09 被阅读0次

Spring的作用,简单说就是用来创建对象的,代替了在程序中new的方式。一般在java中,当某个类或者方法的使用某个对象的时候,那么程序员通常会使用new 来创建对象,使用了spring那么这些工作就会被spring来取代。本来是在程序中自己创建对象变成了spring来创建,因此创建对象的主动权被交给了spring,这个被称为控制反转(IOC),spring把他创建的所有对象放入到IOC容器中,IOC容器可以理解为一个Map对象,key是Spring创建对象的id,value是对象本身,应用程序使用对象是通过id获取到相应的对象。
Spring IOC下面主要分为以下几个点来介绍

1.spring如何创建对象
2.spring对象作用范围

spring对象创建

通常第一次接触spring的时候,大家都是使用spring xml来配置bean,bean就是spring创建的对象。下面列出一个xml配置的对象创建例子
1.使用默认构造方法

<bean id="userService" class="com.ws.springtest.service.impl.UserServiceImpl" />

这种方法创建的bean,需要UserServiceImpl保证提供一个无参构造函数,Srping使用反射机制创建bean,id是bean的id
2.使用普通工厂方法创建bean

<!-- 创建工厂对象 userFactory -->
<bean id="userFactory" class="com.ws.springtest.service.impl.UserFactory" />
<!-- 调用工厂对象userFactory的getUserService方法创建userService对象-->
<bean id="userService" factory-bean="userFactory" factory-method="getUserService"/>

该方式一共是两步,第一步需要创建出工厂对象bean:userFactory,第二步是利用工程对象bean调用工程对象的getUserService方法创建userService对象。
3.使用静态工厂方法创建bean

<bean id="userService" class="com.ws.springtest.service.impl.UserFactory"
         factory-method="getUserService"/>

这种方式是UserFactory类中getUserService方法是静态方法。

Spring对象作用范围

Spring默认创建的对象是单例模式,但是他提供了多种作用域
singleton:默认
prototype:多例
request:作用于web应用的请求范围
session:作用于web应用的会话范围
global-session:作用于集群环境的会话范围

<bean id="userFactory" class="com.ws.springtest.service.impl.UserFactory" 
     scope="prototype" />

scope用来设置作用范围

Spring Bean生命周期

单例对象

创建:当spring容器创建完成后,bean对象就会创建,如果配置了bean的初始化方法,初始化方法会在在bean对象创建完成后调用
活跃:只要spring ioc容器存在,单例bean一直存活
销毁:当spring 容器销毁之前,会对bean进行销毁。当spring容器调用close方法后,如果bean配置了销毁方法,那么bean会在执行完销毁方法后被销毁。

多例对象

创建:当bean在初次本使用的时候,会创建bean,如果配置了bean的初始化方法,初始化方法会在在bean对象创建完成后调用。
活跃:创建完成后一直处于活跃状态
销毁:当bean成为java垃圾回收对象时,会被销毁。
下面的代码是使用xml的方式配置bean的初始化和销毁方法,init-method配置初始化方法 destroy-method 配置销毁方法

<bean id="userService" class="com.ws.springtest.service.impl.UserServiceImpl" 
init-method="init" destroy-method="destory"/>

相关文章

网友评论

      本文标题:Spring IOC容器入门(一)

      本文链接:https://www.haomeiwen.com/subject/lwwvbqtx.html