`
davice_li
  • 浏览: 93276 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring—Ioc(即Dependence Injection)依赖注入的3种方式

阅读更多

spring的Ioc机制是掌握spring的重点。Spring的Ioc方式有三种,分别为 构造函数注入(type one)、 属性注入(type two)、 接口注入(type three)。
下面给出Demo代码及配置 案例。

程序结构图


Spring—Ioc(即Dependence Injection)依赖注入的3种方式 - Esher.Yuen - Simple°C
环境是MyEclipse8.5WorkBench,Spring2.5&jdk1.6_5.
Esher.java是数据的实体类,包含name、school、general三个属性。
EsherInterceptor.java是接口类,forEsher是测试类。
applicationContext.xml是spring配置映射文件。

Type one - 构造函数注入


在Esher实体类中声明构造方法如下:

    public Esher(String name,String general,String school){
        this.name=name;
        this.general=general;
        this.school=school;
    }
并在xml配置文件中配置bean属性映射注入便可。
    <bean id="esher-type" class="org.yys.main.Esher">
        <constructor-arg index="1">
            <value>Esher</value>
        </constructor-arg>
        <constructor-arg>
            <value>Male</value>
        </constructor-arg>
        <constructor-arg>
            <value>SISE</value>
        </constructor-arg>
    </bean>

TypeTwo-属性方法注入


为了和构造方法注入 区别,在Esher.java中新增一个属性值为postId,自动省成器getter&setter方法,构造函数里不初始化postId的值。
属性注入的时候是调用Esher.java里面的setter方法对应注入,故如果改变setter方法的名字或者无setter方法,程序将会抛错。
并在xml里面配置bean里增加红色部分即可
<bean id="esher-type" class="org.yys.main.Esher">
        <constructor-arg index="1">
            <value>Esher</value>
        </constructor-arg>
        <constructor-arg>
            <value>Male</value>
        </constructor-arg>
        <constructor-arg>
            <value>
south china institute of software engineering </value>
        </constructor-arg>
    <!--getter/setter注入-->       
        <property name="postId">
            <value>510990</value>
        </property>

    </bean>


TypeThree-接口注入


在EsherInteceptor里面写入一个abstract的方法public abstract void proEsher();
并在forEsher.java里面实现这个接口打印出一些信息,并设置器getter/setter方法;
Spring—Ioc(即Dependence Injection)依赖注入的3种方式 - Esher.Yuen -   Simple°C
同时在xml配置下添加bean配置(原esher配置存在基础上)
    <!--接口注入    -->
    <!--配置实现类EsherImpl-->
    <bean id="esher_implement" class="org.yys.main.forEsher"></bean>
    <!--注入配置-->
    <bean id="esher_interceptor" class="org.yys.main.forEsher">
        <property name="esher_interceptor" ref="esher_implement"></property>
    </bean>

下面是测试类的main方法
    public static void main(String[] args){
                   
        Resource rs = new ClassPathResource("applicationContext.xml");
        BeanFactory factory = new XmlBeanFactory(rs);
        //构造函数注入
        Esher esher = (Esher) factory.getBean("esher-type");
        System.out.println(esher.getName());
        System.out.println(esher.getGeneral());
        System.out.println(esher.getSchool());
        //getter/setter注入
        System.out.println(esher.getPostId());
   
        //接口注入
        forEsher forE = (forEsher) factory.getBean("esher_interceptor");
        forE.useEsher();
    }


除了Ioc三种注入方式以外,还可利用BeanFactory的生命周期方法进行实例化前的注入方式,但这并不常用。方法如下:
首先写一个Bean,然后创建一个class继承BeanFactory生命中期中的BeanPostProcessor接口,并重写接口中的两个方法,代码如下:
public class MyBeanPostProcessorTool implements BeanPostProcessor{

    public Object postProcessAfterInitialization(Object bean, String beanName)
            throws BeansException {
//        if(bean!=null&&beanName.equals("userBean")){   //可在Bean销毁前进行打印。
//            UserBean user = (UserBean) bean;
//        System.out.println("名称: "+user.getName());
//        System.out.println("地址: "+user.getAddress());
//        }
        System.out.println(beanName+" has been destroyed");
        return bean;
    }

    public Object postProcessBeforeInitialization(Object bean, String beanName)
            throws BeansException {
       
        if(bean != null&&beanName.equals("userBean")){
            UserBean user = (UserBean)bean;
            user.setName("广州大学华软软件学院");
            user.setAddress("广州广从大道13号");
        }
    System.out.println(beanName+" init done!");
     return bean;
    }


然后在xml托管这两个类:
<bean id = "userBean" class = "com.yys.domain.UserBean" ></bean>
<bean id = "myTool" class = "com.yys.domain.MyBeanPostProcessorTool" ></bean>
测试方法中只要get到Bean后直接打印对象属性值即可:
public static void main(String[] args){
     ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserBean user = (UserBean) ac.getBean("userBean");
            System.out.println("名称: "+user.getName());
            System.out.println("地址: "+user.getAddress());
       }

分享到:
评论

相关推荐

    Spring Ioc 注解 依赖注入

    Spring IoC容器主要通过两种方式实现依赖注入: 1. **构造器注入**:通过类的构造方法来注入依赖项。 2. **设值注入**:通过setter方法来注入依赖项。 #### 四、使用注解进行依赖注入 随着Spring框架的发展,除了...

    springIoc实现原理

    依赖注入是IoC的一种具体实现方式,它允许对象在运行时动态地获得依赖。Spring支持三种类型的依赖注入: 1. **构造器注入**:通过构造函数传入依赖对象。 2. **设值注入**:使用setter方法注入依赖。 3. **接口注入...

    Spring Ioc(依赖注入)入门例子--属性注入

    Spring的核心特性之一就是它的Inversion of Control(IoC,控制反转)容器,也被称为Dependency Injection(DI,依赖注入)。这个概念是Spring框架使应用程序组件之间解耦的关键。让我们深入探讨一下Spring的IoC和...

    springIOC控制反转 依赖注入实例

    依赖注入(Dependency Injection,DI)是实现IOC的一种方式,它通过容器在运行时将依赖关系注入到对象中,使得对象之间解耦,提高了代码的可测试性和可维护性。 Spring中的依赖注入主要通过以下三种方式实现: 1. ...

    spring IOC容器依赖注入XML配置

    Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)为核心,极大地简化了应用程序的复杂性。在本教程中,我们将深入探讨如何通过XML配置在...

    Springioc注入Demo

    DI(Dependency Injection,依赖注入)是IOC的一种实现方式,通过配置或编程的方式,将对象之间的依赖关系在运行时动态注入,而不是由对象自己去查找和创建依赖。 在Spring IOC中,主要的注入方式有以下几种: 1. ...

    SpringIOC_泛型依赖注入.zip

    本资料包"SpringIOC_泛型依赖注入.zip"主要关注的是Spring如何通过泛型进行依赖注入,这是一种更加灵活且类型安全的注入方式。 在Java编程中,泛型是一种强大的特性,允许我们在类、接口和方法中使用类型参数,从而...

    Spring IOC的注入方式总结

    在Spring中,IOC的主要实现方式有两种:依赖注入(Dependency Injection,简称DI)和基于接口的配置。下面将对这两种方式进行详细阐述。 一、依赖注入(Dependency Injection) 1. **构造器注入**:通过构造函数来...

    Spring 三种依赖注入方式.doc

    Spring 三种依赖注入方式 Spring 框架中提供了多种依赖注入方式,其中最常用的三种依赖注入方式分别是接口注入、设值注入和构造函数注入。下面,我们将分别对这三种依赖注入方式进行详细的介绍和分析。 一、接口...

    Spring IoC依赖包

    - **依赖注入(Dependency Injection, DI)**: Spring通过构造器注入、设值注入或者接口注入的方式,将对象的依赖关系以声明式的方式定义在配置文件或注解中,由Spring容器负责实例化和组装Bean。 - **AOP(面向切...

    实验一 Springioc基本操作.docx

    在 Spring IOC 中,依赖注入(Dependency Injection)是核心机制之一。它允许对象之间的依赖关系被容器管理,从而实现了对象之间的解耦合。在上面的例子中,UserServiceImpl 依赖于 UserDao,因此需要将 UserDao ...

    Spring IOC.pdf

    IOC的设计模式是实现控制反转的机制,具体来说是一种称为“依赖注入”(Dependency Injection,简称DI)的模式。依赖注入是在运行期,由外部容器动态地将依赖关系注入到组件中。主要有以下几种依赖注入方式: 1. ...

    编程语言+JAVAspring+IoC容器+依赖注入

    编程语言+JAVAspring+IoC容器+依赖注入**:这是一...它介绍了JAVAspring的IoC容器的概念、原理和作用,以及如何使用JAVAspring的IoC容器来实现依赖注入,包括设值注入和构造注入的方式,以及一些配置文件和注解的用法。

    浅谈Spring IoC容器的依赖注入原理

    浅谈Spring IoC容器的依赖注入原理 Spring IoC容器的依赖注入原理是Spring框架的核心机制之一,负责将服务对象(Bean)实例化并将其提供给客户端使用。依赖注入原理可以分为两个阶段:IoC容器初始化和Bean实例化。 ...

    spring IOC实现(墨者革离)

    在Spring中,实现IOC的主要方式有两种:依赖注入(Dependency Injection,DI)和基于XML的配置。在这个项目中,可能结合了这两种方法。依赖注入可以通过构造函数注入、setter方法注入或接口注入来实现,使得对象间的...

    SpringIoc示例代码

    Spring IOC,全称Inversion of Control,即“控制反转”,是Spring框架的核心特性之一。在传统的Java应用程序中,对象的创建和管理通常由开发者自己控制。而在Spring IOC中,这种控制权被反转,对象的创建、初始化、...

    IoC 依赖注入 技术总结

    IoC 依赖注入技术是软件设计中的一种重要技术,旨在解决软件系统中的耦合问题。该技术的核心思想是将被调用构件实例化,并注入到调用构件之中,以实现软件系统的高内聚、低耦合。IoC 依赖注入技术可以有效地提高软件...

    spring ioc思维导图源文件

    - **依赖注入(DI,Dependency Injection)**:是IOC的一种实现方式,Spring通过DI管理对象的依赖关系,即在运行时将依赖的对象注入到需要它们的组件中。 **2. Spring容器** - **Bean工厂(BeanFactory)**:...

    SpringIOC经典Demo

    3. **依赖注入**:这是Spring IOC的另一个关键概念。Spring通过构造函数注入、setter注入或属性注入来实现对象之间的依赖关系。这种方式使得代码更加灵活,易于测试和维护。 4. **Spring容器**:Spring提供了两种...

    Spring IoC讲解PPT

    Spring 提供了构造函数注入、setter 注入和接口注入三种方式来实现依赖注入。通过这种方式,对象的依赖关系被明确地定义在配置中,而不是硬编码在对象内部,提高了代码的可测试性和可维护性。 **面向切面编程(AOP...

Global site tag (gtag.js) - Google Analytics