`
davice_li
  • 浏览: 90960 次
  • 性别: 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 注解 依赖注入

    SpringIOC_泛型依赖注入.zip

    SpringIOC_泛型依赖注入,泛型依赖注入,注入一个组件的时候,他的泛型也是参考标准

    spring IOC容器依赖注入XML配置

    spring IOC容器依赖注入XML配置详解 运行环境:eclipse 构建工具:maven 不提供maven构建,maven用来解决jar包的依赖

    实验一 Springioc基本操作.docx

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

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

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

    Spring 三种依赖注入方式.doc

    Spring 三种依赖注入方式.doc Spring 三种依赖注入方式.doc

    Springioc注入Demo

    详细讲解了springioc的各种注入方式以及对应的java方式。讲解了springioc和DI的区别,以及注入特殊复杂的属性

    springIOC控制反转 依赖注入实例

    springIOC 小例子 附带源码 适合新手学习

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

    spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图

    springioc和spring aop

    其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的...

    springIoc实现原理

    spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合

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

    NULL 博文链接:https://samter.iteye.com/blog/408519

    Spring IoC依赖包

    spring ioc开发最小依赖包4个,还包含两个辅助包commons-logging.jar和log4j.jar

    以注解方式模拟Spring IoC AOP

    以注解方式模拟Spring IoC AOP,了解Spring是如何实现的.

    Spring IOC的注入方式总结

    Spring IOC的注入方式总结 ,具体效果和过程看博文http://blog.csdn.net/evankaka/article/details/44832305

    springIOC手写框架分析

    springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC...

    spring ioc模块手写demo

    spring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demo...

    IoC 依赖注入 技术总结

    IoC 依赖注入 技术总结 IoC 依赖注入 技术总结

    SpringIoc示例代码

    SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码

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

    主要介绍了浅谈Spring IoC容器的依赖注入原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics