Spring反向控制(Ioc)--1

Spring反向控制(Ioc)--1

 

反向控制就是依赖注入。

任何重要的系统,都需要至少两个相互合作的类,来共同完成业务逻辑。通常,每个对象都要自己负责得到与它合作的对象(依赖)。这样就导致了代码的耦合度提高,而且还难以测试。

使用Ioc后,对象的依赖,都是在创建对象的时候,由负责协调系统中各个对象的外部实体进行管理提供的,也就是将依赖注入到对象中。这个负责协调的外部实体,也就是Spring容器。

反向控制(Ioc)是Spring框架的核心,虽然说起来有点复杂,但在项目使用中,Ioc是很简单的,通过使用Ioc,将会使我们的代码变得更加简单,容易理解还容易测试。

 

BeanFactory

BeanFactorySpring容器中的一个管理类。

负责创建和分发其它Bean的类。

负责注入每个类的依赖关系。

负责调用实现了初始化和销毁方法的Bean的初始化和销毁方法。

被管理Bean,是在需要使用的时候,才进行创建管理起来的。

 

最常用到了BeanFactory类是org.springframework.bean.factory.xml.XmlBeanFactory

通过该类获取被管理Bean的方式如下:

BeanFactory factory = new XmlBeanFactory(new FileInputStream(“beans.xml”));

MyBean myBean = (MyBean)factory.getBean(“myBean”);

这样就可以在代码中调用myBean实例的相关方法了。

 

ApplicationContext

ApplicationContext实现了BeanFactory所实现的所有功能,而且还在BeanFactory的基础上,还实现了:

1.    提供了对文本信息进行解析的工具,包括对多国语言的支持

2.    提供了载入文件资源的通用方法,比如载入图片

3.    提供了向注册监听器发送事件的途径

4.    ApplicationContext是在载入文本信息后,立马就载入所有的Bean信息,而不同BeanFactory一样,在getBean的时候才载入对应的Bean的信息

鉴于ApplicationContext功能的强大,一般的系统都会优先选择ApplicationContext。只有在考虑资源的稀缺情况下,才使用BeanFactory,比如移动设备上的应用开放。

下面是经常用到的ApplicationContext的实现,以及它们的使用方法:

1.    ClassPathXmlApplicationContext

从类路径中的xml文件,载入上下文定义信息。把上下文定义文件当成类路径资源。该方式会在class path的所有目录下寻找指定的xml文件,直到找到为止

使用方式:

ApplicationContext context = new ClassPathXmlApplicationContext(“beans.xml”);

MyBean myBean = context.getBean(“myBean”);

2.    FileSystemXmlApplicationContext

从文件系统中的xml文件载入上下文定义信息。该方式只会在指定的位置找xml文件。

使用方式:

ApplicationContext context = new FileSystemXmlApplicationContext(“c:/beans.xml”);

MyBean myBean = context.getBean(“myBean”);

3.    XmlWebApplicationContext

web系统中的xml文件载入上下文定义信息

载入WEB-INF/applicationContext.xml文件

使用方法:

ApplicationContext context = new XmlWebApplicationContext();

MyBean myBean = context.getBean(“myBean 2” );

 

使用XML装配Bean

理论上Bean的装配可以是任何资源文件,但实际上,xml是最常见的Spring应用系统配置资源,我们这里就介绍它的配置方式。

Spring中所有的xml资源文件,都是标准的xml文件,必须以<beans>为根标签,然后包含很多<bean>子标签,定义一个个的Bean。具体格式如下:

<?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/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

       <bean... />

       ...

</beans>

 

接下来一个个讲解不同情形的Bean的定义。

1.    定义一个简单的bean

<bean id=”myBean” class=”cn.com.book.demo.MyBean”/>

2.    定义一个原型或单实例bean

原型Bean:每次从上下文中获取的时候,都是不同的实例

<bean id=”myBean” class=”cn.com.book.demo.MyBean” singleton=”false”/>

单实例Bean:每次从上下文中获取的,都是同一个实例

<bean id=”myBean” class=”cn.com.book.demo.MyBean” singleton=”true”/>

3.    初始化和销毁

<bean id=”myBean” class=”cn.com.book.demo.MyBean” init-method=”init” destroy-method=”destory”/>

        实例创建后,自动调用init方法,对对象进行初始化,要销毁前,自动调用destory方法,实现资源的释放

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值