千家信息网

Spring如何控制反转IOC容器

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,本篇文章给大家分享的是有关Spring如何控制反转IOC容器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。控制反转(IoC)容器一.什么
千家信息网最后更新 2025年01月18日Spring如何控制反转IOC容器

本篇文章给大家分享的是有关Spring如何控制反转IOC容器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

控制反转(IoC)容器

一.什么是控制反转模式? 不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。 容器 (在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。

二.Spring 中的 Bean? 由Spring IoC容器所管理的对象被称之为bean。bean就是由Spring容器初始化、装配及被管理的对象。 bean定义以及bean相互间的依赖关系将通过配置元数据来描述。 三,什么是Spring IoC容器? org.springframework.beans包是Spring IoC容器的基础。 org.springframework.beans.factory.BeanFactory接口是Spring IoC容器的实际代表者。 IoC容器负责容纳此前所描述的bean,并对bean进行管理。

1.BeanFactory 接口 BeanFactory是IoC容器的核心接口。是工厂设计模式的实现。bean 工厂的概念是 Spring 作为 IOC 容器的基础。 它的职责包括:实例化、检索、配置应用程序中的对象及管理对象之间的关系。 BeanFactory 支持两个对象模型。 单态模型:提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。 原型模型:确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。

2.ApplicationContext接口 org.springframework.context.ApplicationContext由BeanFactory接口派生扩展而来,因而提供了 BeanFactory所有的功能。 在构建J2EE应用时,使用ApplicationContext将是更好的选择。 context包还提供了以下的功能: MessageSource, 提供国际化的消息访问。 资源访问,如URL和文件。 事件传播,实现了ApplicationListener接口的bean。 载入多个(有继承关系)上下文 。

3.配置元数据 Spring IoC容器将读取配置元数据;并通过它对应用中各个对象进行实例化、配置以及组装。 基于XML的元数据是最常用到的配置元数据格式。然而,它并不是***的描述格式。Spring IoC容器在这一点上是完全开放的。 当使用基于XML的配置元数据时,将在顶层的元素中配置一个或多个元素。 bean定义与应用程序中实际使用的对象一一对应。通常情况下bean的定义包括: 服务层对象、数据访问层对象(DAO)、类似Struts Action的表示层对象、Hibernate SessionFactory对象、JMS Queue对象等等。

四.实例化IoC容器(基于XML的元数据) 通过ClassPathXmlApplicationContext类加载一个或多个XML文档来实例化BeanFactory接口的实现扩展 ApplicationContext类。 要从 BeanFactory 检索 bean,只需调用 getBean() 方法,传入将要检索的 bean 的名称即可。

五.一个简单Spring 示例

1.建立Java项目:MySpring

2.导入Spring框架。

3.创建JavaBean:HelloBean。编写testHello方法。

  1. HelloBean.java

  2. view plaincopy to clipboardprint?

  3. <FONT size=2> package com.qu.bean;

  4. public class HelloBean {

  5. public String sayHello(String name){

  6. return String.format("%1$s : Hello World!", name);

  7. }

  8. }FONT>

  9. package com.qu.bean;

  10. public class HelloBean {

  11. public String sayHello(String name){

  12. return String.format("%1$s : Hello World!", name);

  13. }

  14. }

4.配置applicationContext.xml 将HelloBean注入Spring容器。

  1. applicationContext.xml

  2. view plaincopy to clipboardprint?

  3. <FONT size=2> xml version="1.0" encoding="UTF-8"?>

  4. <beans

  5. xmlns="http://www.springframework.org/schema/beans"

  6. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  7. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

  8. <bean class="com.qu.bean.HelloBean" id="helloBean">

  9. bean>

  10. beans>FONT>

  11. xml version="1.0" encoding="UTF-8"?>

  12. <beans

  13. xmlns="http://www.springframework.org/schema/beans"

  14. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  15. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

  16. <bean class="com.qu.bean.HelloBean" id="helloBean">

  17. bean>

  18. beans>view plaincopy to clipboardprint?

  19. <FONT size=2><STRONG><U>helloBean.xmlU>STRONG>FONT>

  20. helloBean.xmlview plaincopy to clipboardprint?

  21. xml version="1.0" encoding="UTF-8"?>

  22. <beans

  23. xmlns="http://www.springframework.org/schema/beans"

  24. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  25. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

  26. <bean class="com.qu.bean.HelloBean" id="helloBean">

  27. bean>

  28. beans>

  29. xml version="1.0" encoding="UTF-8"?>

  30. <beans

  31. xmlns="http://www.springframework.org/schema/beans"

  32. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  33. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

  34. <bean class="com.qu.bean.HelloBean" id="helloBean">

  35. bean>

  36. beans>view plaincopy to clipboardprint?

  37. <FONT size=2>FONT>

5.导入Junit 4 测试。

6.编写测试类TestHello 。重写setUp方法实例化容器,编写testHello方法测试HelloBean的hello方法。

  1. view plaincopy to clipboardprint?

  2. <FONT size=2> TestHello.javaFONT>

  3. TestHello.javaview plaincopy to clipboardprint?

  4. <FONT size=2>

  5. package com.qu.test;

  6. import org.springframework.context.ApplicationContext;

  7. import org.springframework.context.support.ClassPathXmlApplicationContext;

  8. import com.qu.bean.HelloBean;

  9. import junit.framework.TestCase;

  10. public class TestHello extends TestCase {

  11. private ApplicationContext ctx;

  12. private HelloBean hello;

  13. protected void setUp() throws Exception {

  14. super.setUp();

  15. this.ctx = new ClassPathXmlApplicationContext(

  16. new String[] {"ApplicationContext.xml","OtherXML/helloBean.xml"});

  17. this.hello = (HelloBean) this.ctx.getBean("helloBean");

  18. }

  19. public void testSayHello(){

  20. assertEquals("Java : Hello World!", this.hello.sayHello("Java"));

  21. }

  22. }

  23. FONT>

以上就是Spring如何控制反转IOC容器,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

0