当前位置 主页 > 网站技术 > 代码类 >

    Spring实战之协调作用域不同步的Bean操作示例

    栏目:代码类 时间:2019-11-29 12:06

    本文实例讲述了Spring实战之协调作用域不同步的Bean操作。分享给大家供大家参考,具体如下:

    一 配置

    <?xml version="1.0" encoding="GBK"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
       <bean  class="org.crazyit.app.service.impl.Chinese">
          <!-- Spring只要检测到lookup-method元素,
          Spring会自动为该元素的name属性所指定的方法提供实现体。-->
          <lookup-method name="getDog" bean="gunDog"/>
       </bean>
       <!-- 指定gunDog Bean的作用域为prototype,
       希望程序每次使用该Bean时用到的总是不同的实例 -->
       <bean  class="org.crazyit.app.service.impl.GunDog"
          scope="prototype">
          <property name="name" value="旺财"/>
       </bean>
    </beans>
    
    

    二 接口

    1 Dog

    package org.crazyit.app.service;
    public interface Dog
    {
       public String run();
    }
    
    

    2 Person

    package org.crazyit.app.service;
    public interface Person
    {
       public void hunt();
    }
    
    

    三 实现类

    GunDog

    package org.crazyit.app.service.impl;
    import org.crazyit.app.service.*;
    public class GunDog implements Dog
    {
       private String name;
       public void setName(String name)
       {
          this.name = name;
       }
       public String getName()
       {
          return name;
       }
       public String run()
       {
          return "我是一只叫" + getName()
            + "的猎犬,奔跑迅速..." ;
       }
    }
    
    

    Chinese

    package org.crazyit.app.service.impl;
    import org.crazyit.app.service.*;
    public abstract class Chinese implements Person
    {
       private Dog dog;
       // 定义抽象方法,该方法用于获取被依赖Bean
       public abstract Dog getDog();
       public void hunt()
       {
          System.out.println("我带着:" + getDog() + "出去打猎");
          System.out.println(getDog().run());
       }
    }
    
    

    四 测试类

    package lee;
    import org.springframework.context.*;
    import org.springframework.context.support.*;
    import org.crazyit.app.service.*;
    public class SpringTest
    {
      public static void main(String[] args)
      {
        // 以类加载路径下的beans.xml作为配置文件,创建Spring容器
        ApplicationContext ctx = new
          ClassPathXmlApplicationContext("beans.xml");
        Person p1 = ctx.getBean("chinese" , Person.class);
        Person p2 = ctx.getBean("chinese" , Person.class);
        // 由于chinese Bean是singleton行为,
        // 因此程序两次获取的chinese Bean是同一个实例。
        System.out.println(p1 == p2);
        p1.hunt();
        p2.hunt();
      }
    }
    
    

    五 测试结果

    true
    我带着:org.crazyit.app.service.impl.GunDog@69a3d1d出去打猎
    我是一只叫旺财的猎犬,奔跑迅速...
    我带着:org.crazyit.app.service.impl.GunDog@86be70a出去打猎