`
hulin
  • 浏览: 61745 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SpringIOC容器管理bean

    博客分类:
  • java
阅读更多
  1、spring可以从官方站点下载:http://www.springframework.org。所需spring.jar和   commons-logging.jar。 
  IOC全称为Inversin of Control,译控制反转。
  依赖注入的3种主要方式:构造方法注入、属性注入、接口注入。
  Spring提供强大的IOC容器,支持属性注入和构造方法注入两种。
  2、BeanFactory采用的是工厂模式,实现了BeanFactory接口类负责创建并配置所有Bean.应用程序将Bean创建和配置完全委托给BeanFactory,然后从BeanFactory获取使用Bean;
          启动应用程序
               ↓
          实例化BeanFactory → 获取xml配置文件
               ↓
          从BeanFactory中获取Bean并使用
               ↓
          销毁BeanFactory → 销毁Bean

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="hello"
class="example.chapter1.helloworld.HelloWorldImpl">
<property name="name" value="Spring"></property>
</bean>
</beans>
①Spring提供几种BeanFactory实现,最常用的是XmlBeanFactory。最简单方法从本地加载xml配置文件。BeanFactory factory=new BeanFactory(new FileSystemResoure("config.xml"));
②使用ClassPath定位XML更为方便,只需确保XML配置文件位于ClassPath路径内
BeanFactory factory=new BeanFactory(new ClassPathResource("config.xml");
在获取BeanFactory后就可以获取Bean实例
③使用ApplicationContext
ApplicationContext context=new ClassPathXmlApplicationContext("config.xml");
HelloWorld hello = (HelloWorld) beanfactory.getBean("hello");
  3、装配Bean
  告知Spring容器如何创建并配置Bean的方式XML每个<bean>节点配置,对于对下ExampleBean:
  package example.chapter;
  public class ExampleBean{
   private List list;
   private int size=100;
   pivate String version;
    public void setSize(int size){
      this.size=size;
    }
    public void setVersion(String version)
    {
      this.version=version;
     }
    public void init(){
      list=new ArrayList(size);
    }
}
需要size和version两个属性,然后调用init方法完成初始化
<bean id="exampleBean" class="example.chapter.ExampleBean" init-metod="init">
<property name="size" value="10"/>
<property name="version" value="1.0_beta"/>
</bean>
  4、各种注入类型
  ①注入基本类型
  通过set方法可以注入指定的属性值:
  package example.chapter;
import java.net.URL;
public class BasicBean {
    private String title;
    public void setUseCache(boolean useCache) {}
    public void setMaxSize(int size) {}
    public String getTitle() { return title; }
    public void setTitle(String title) {this.title = title;}

    public void setFile(URL url) {
        System.out.println(url);
    }
}对就XML配置片段如下:
    <bean id="basicBean" class="example.chapter.BasicBean">
        <property name="useCache" value="true" />
        <property name="maxSize" value="100" />
        <property name="title" value="A Basic Bean" />
        <property name="file" value="config.xml" />
    </bean>
  ②注入引用类型
  如果需要注入的属性不是基本类型,而是引用类型,则使用<ref>替代<value>
  package example.chapter;
public class RefBean {
    private BasicBean basicBean;
    public void setBasic(BasicBean basicBean) {
        this.basicBean = basicBean;
    }
}对应XML配置片段如下
    <bean id="refBean" class="example.chapter3.RefBean">
        <property name="basic" ref="basicBean" />
    </bean>
  ③注入List类型和数组类型
  Spring支持各种集合类型的注入
  package example.chapter;

import java.util.List;
public class ListBean {
    public void setChildren(List children) {}
    public void setPrices(List<Float> prices) {
        for(Float f : prices) {
            System.out.println(f);
        }
    }
    public void setFibonacci(int[] fibonacci) {
        for(int n : fibonacci) {
            System.out.println(n);
        }
    }
}对应XML配置片段如下
<bean id="listBean" class="example.chapter3.ListBean">
        <!-- 注入普通List -->
        <property name="children">
            <list>
                <value>A String</value>
                <ref bean="basicBean" />
            </list>
        </property>
        <!-- 注入强类型的List<Float> -->
        <property name="prices">
            <list>
                <value>12.54</value>
                <value>82</value>
                <value>27.9</value>
            </list>
        </property>
        <!-- 注入int[]数组 -->
        <property name="fibonacci">
            <list>
                <value>1</value>
                <value>1</value>
                <value>2</value>
                <value>3</value>
                <value>5</value>
            </list>
        </property>
    </bean>
  ④set类型注入
  Set类型和List类似,只不过注入的是Set,因此包含任意的<value>或<ref>节点
  package example.chapter;
  import java.util.Set;
  public class SetBean {
    public void setCups(Set cups) {
        for(Object obj : cups) {
            System.out.println(obj);
        }
    }
  }
  对应的XML配置片段如下
      <bean id="setBean" class="example.chapter3.SetBean">
        <property name="cups">
            <set>
                <value>spring</value>
                <value>hibernate</value>
                <value>hibernate</value>
                <ref bean="listBean" />
            </set>
        </property>
    </bean>
  ⑤注入Map类型
  Map存在于健值映射,通过<entry>节点来定义各项
  package example.chapter;
  import java.util.*;
  public class MapBean {
    public void setWeekday(Map map) {}
  }对应XML配置如下:
   <bean id="mapBean" class="example.chapter3.MapBean">
        <property name="weekday">
            <map>
                <!-- 用String作为key -->
                <entry key="Monday">
                    <value>do something</value>
                </entry>
                <entry key="Tuesday">
                    <ref bean="setBean" />
                </entry>
                <!-- 用Bean作为key -->
                <entry key-ref="basicBean" value="basic" />
                <entry key-ref="listBean" value-ref="setBean" />
            </map>
        </property>
    </bean>
上面配置上,注入的Map键只能为String类型,但实际上,Map可以做为任意的Object做为键。为了使用另一个Bean作为键,需要近如下编写<entry>节点。
<entry>
<key>
  <ref bean="basicBean"/>
</key>
<value>basic</value>
</entry>
<entry>
<key>
  <ref bean="listBean"/>
</key>
<ref>setBean</ref>
</entry>
  ⑥注入Properties类型
  Properties也是键值对构成,注入和Map类似,不过,由于Properties的键值都只能由String,因此不必使用<value>,注入Properties的XML配置片段如下。
    <bean id="propBean" class="example.chapter3.PropBean">
        <property name="env">
            <props>
                <prop key="target">1.5</prop>
                <prop key="encoding">UTF-8</prop>
                <prop key="debug">on</prop>
            </props>
        </property>
    </bean>
  ㈡ 构造方法注入
  除了上述属性注入外,还有构造方法注入.
  使用构构造方法注入的优点是,构造方法的参数是强制注入的,这样可以保证Bean在创建时就正确初始化了。属性可能由于多次注入而导致不正确的状态。
  package example.chapter;
  public class ConstructorBean {
    public ConstructorBean(int min, int max) {
        System.out.println("(int, int)");
    }
  }
在XML配置文件中,需要在<bean>和</bean>之间加入<constructor-arg>节点,按照构造方法的参数排序。
      <bean id="constructorBean" class="example.chapter3.ConstructorBean">
        <constructor-arg value="100" />
        <constructor-arg value="200" />
    </bean>
分享到:
评论

相关推荐

    SpringIOC容器对Bean管理的相关案例

    SpringIOC容器对Bean管理的相关案例

    spring Ioc容器配置

    spring Ioc容器配置 IOC容器数据源配置 &lt;!-- 配置数据源 --&gt; &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt; &lt;value&gt;org.gjt.mm.mysql.Driver ...

    SpringIoC容器和Bean管理学习记录-SSM框架的学习与应用

    1.spring中bean实例化的俩种方式 2.spring中bean的各种元素如何使用 3.spring中的bean管理 4.spring中不同类型bean的作用域 ...通过我的项目,可以跟着学习SPringIoC容器和Bean管理,帮助你快速上手SSM框架

    Spring IOC容器实现分析.pdf 下载

    在实际开发中,我们可以使用Spring的IOC容器来管理数据库连接池、事务管理器、服务接口的实现类等。例如,通过@Qualifier注解指定特定的Bean,使用@Autowired注解自动注入依赖,或者通过@Scope注解定义Bean的作用域...

    spring IOC反射装载bean

    在Spring框架中,IOC(Inversion of Control,控制反转)是一种设计原则,它将对象的创建和管理交给了容器来处理。在这个特定的"spring IOC反射装载bean"的主题中,我们将深入探讨Spring如何通过XML配置文件来加载和...

    Spring IoC容器实现的结构分析

    Spring IoC容器是Spring框架的核心,它负责管理应用对象的生命周期和依赖关系。通过对IoC(Inversion of Control,控制反转)的实现,Spring容器将对象的创建和组装工作从应用代码中分离出来,使得应用更易于测试和...

    手写一个SpringIoc容器

    本项目"手写一个SpringIoc容器"旨在模仿Spring的IOC(Inversion of Control,控制反转)功能,帮助开发者深入理解Spring的工作原理,提升对依赖注入(Dependency Injection)模式的认识。 在实现自定义的Spring IOC...

    springIoc实现原理

    5. **Bean管理**:Spring容器负责Bean的生命周期管理,包括销毁等操作。 **六、应用场景** Spring Ioc广泛应用于各种项目中,如: - 数据访问层(DAO):通过Ioc管理数据库连接和事务。 - 业务逻辑层(Service)...

    spring ioc和aop原理流程图(详细)

    以下是Spring IOC容器的主要知识点: 1. **Bean的定义**:在Spring中,业务对象被称为Bean。Bean定义包含了创建和管理Bean的所有信息,如类名、属性值、依赖关系等,通常通过XML、注解或Java配置来定义。 2. **...

    Java-Spring-SpringIoC容器-SpringIoC的学习

    在Java Spring框架中,Spring IoC(Inversion of Control,控制反转)是核心特性之一,它使得应用程序的组件之间的依赖关系不再由代码直接管理,而是交由Spring IoC容器负责。这种设计模式降低了代码间的耦合,提高...

    尚硅谷]_佟刚_Spring IOC 容器中 Bean 的生命周期.pdf

    1、&lt;bean&gt;标签主要用来进行Bean定义; 2、alias用于定义Bean别名的; 3、import用于导入其他配置文件的Bean定义,这是为了加载多个配置文件,当然也可以把这些配置文件构造为一个数组(new String[] {“config1.xml...

    详解Spring IOC 容器启动流程分析

    Spring IOC 容器启动流程分析 Spring IOC 容器是 Java 企业级应用程序的核心组件之一,它提供了一个统一的依赖注入机制,使得应用程序的组件之间能够松耦合。Spring IOC 容器的启动流程是整个 Spring 框架的核心...

    08-IoC配置-bean的生命周期控制

    Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务。 Spring IOC容器对Bean的生命周期进行管理的过程如下: 通过构造器或工厂方法创建Bean实例 为Bean的属性设置值和对其它Bean的...

    Spring为IOC容器注入Bean的五种方式详解

    Spring为IOC容器注入Bean的五种方式详解 Spring 框架中,IOC(Inverse of Control,控制反转)容器是核心组件之一,用于管理 Bean 的生命周期。在 Spring 中,IOC 容器可以通过五种方式来注入 Bean,本文将对这五...

    spring在IoC容器中装配Bean详解

    在 Spring 框架中,IoC 容器是 Bean 的容器,负责创建、管理和装配 Bean。在本文中,我们将详细介绍 Spring 在 IoC 容器中装配 Bean 的过程。 一、Spring 配置概述 Spring 配置概述分为三部分:基于 XML 的配置、...

    Spring的IoC容器初始化源码解析

    ### Spring的IoC容器初始化源码解析 #### 一、Spring框架的核心——IoC容器 Spring框架是一个开源的轻量级Java开发框架,其核心功能是IoC(Inversion of Control,控制反转)容器和AOP(Aspect Oriented ...

    Spring IOC容器应用实例

    在实际应用中,Spring 的 IoC 容器还提供了许多高级特性,如 Bean 的生命周期管理、AOP(面向切面编程)、事件处理、国际化支持等。例如,我们可以通过`@PostConstruct`和`@PreDestroy`注解来声明初始化和销毁方法,...

    Spring中IoC优点与缺点解析

    IoC(Inversion of Control)是 Spring 框架中的一种设计模式,它的主要思想是将对象的创建和管理交给容器,从而解耦合对象之间的依赖关系。今天,我们将详细解析 IoC 的优点和缺点。 优点 1. 简化对象的创建:IoC ...

Global site tag (gtag.js) - Google Analytics