zoukankan      html  css  js  c++  java
  • Spring IOC (构造器注入)

    Spring IOC

    1,  概念解释:

    依赖注入:每个对象负责管理与自己协作的对象(即它所依赖的对象)的引用,这将导致高度耦合和难以测试的代码。而依赖注入则是对象的依赖关系将由负责协调系统中各个对象的第三方组件在创建对象时设定。对象无需自行创建或管理它们的依赖关系——依赖关系将被自动注入到需要它们的对象中去。

    2,  注入的方式:

    1)        构造器注入。

    例子:

    a)接口一:Performer

    package spring.di;

    public interface Performer {

        void performer() ;

    }

    b)实现接口的实现类:PoeticJuggler //会念诗的杂技人

    package spring.di;

    import org.springframework.context.ApplicationContext;

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class PoeticJuggler extends Juggler {

           private Poem poem;

           private int beanBags;

           public PoeticJuggler(Poem poem) {

                 

                  this.poem = poem;

           }

           public PoeticJuggler(int beanBags, Poem poem) {

                  this.beanBags = beanBags;

                  this.poem = poem;

           }

           @Override

           public void performer() {

                  System.out.println("JUGGLING " + beanBags + " Beanbags");

                  System.out.println("While reciting...");

                  poem.recite();

           }

           public static void main(String[] args) {

                  ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");

                  Performer performer = (Performer)ctx.getBean("Juggler");

                  performer.performer();

           }

    }

    C)接口2:Poem

    package spring.di;

    public interface Poem {

           void recite();

    }

    D)实现接口2的实现类:Sonnet29

    package spring.di;

    public class Sonnet29 implements Poem {

           public void recite() {

                  // TODO Auto-generated method stub

                  System.out.println("hi!");

           }

    }

    综上:

    已经有了两个接口和实现了两个接口的实现类,然后需要做的下一步是把poem关联进PoeticJuggler里。这时可以用Spring的依赖注入。采用构造器注入的方式。

    编写的bean.xml文件

    <?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.xsd">

       <!--   <bean id="userService" class="tao.UserService"></bean> -->

       <!-- <bean id="userServiceImpl" class="tao.UserServiceImpl"></bean> -->

       <bean id="pom" class="spring.di.Sonnet29" />

       <bean id="Juggler" class="spring.di.PoeticJuggler">

                  <constructor-arg value = "15"/>

                  <constructor-arg ref = "pom"/>

       </bean>

    </beans>

    3,  关键点:

    1)  面向接口编程和依赖注入,实现松耦合。这是编程的思路。

    2)  value和ref的区别:

    value是指为简单类型复制,如:int,String等。

    而ref属性是将ID为sonnet29的Bean引用(不是简单类型)传递给构造器。

  • 相关阅读:
    IOS 学习笔记(2) 视图UINavigationController
    [转] IOS中AppDelegate中的生命周期事件的调用条件
    IOS 学习笔记(1) 视图UIViewController
    IOS 单例模式的学习
    object-c 协议(Protocols)和代理(Delegation)的学习
    object-c 内存管理机制的学习
    Object-c Block的使用及说明
    KVO 的使用和举例
    魔豆电子相框
    魔豆应用开发傻瓜书——helloworld
  • 原文地址:https://www.cnblogs.com/bt575876212/p/4885603.html
Copyright © 2011-2022 走看看