zoukankan      html  css  js  c++  java
  • 《Spring实战》-2

    装配Bean

    1、装配wiring,即创建应用对象之间的协作关系的行为,者也是依赖注入的本质。
    2、创建Spring配置
    从Sring3.0开始,Spring容器提供了两种配置Bean的方式:
    XML文件配置方式
    基于Java注解的配置方式
    3、典型的xml配置文件:

    beans命名空间不是唯一的Spring命名空间,Spring核心框架自带了10个命名空间配置,如下:

    4、当Spring容器加载Bean时,Spring使用反射来创建Bean。

    5、覆盖Spring默认的单例配置:Spring Bean默认都是单例,但有时我们每次都需要获得唯一的Bean实例,比如每个人的门票要唯一:
    我们只需要配置Bean的scope属性为prototype即可:

    <bean id="ticket" class="com....Ticket" scope="prototype" />
    

    Spring提供的作用域选项:

    6、初始化和销毁Bean
    Auditorium(舞台)要保证做的最先和最后两件事情:
    开灯,关灯。

    需要在Bean中使用init-method和destory-method属性:

    当有很多上下文定义的Bean有相同名字的初始化方法和销毁方法时,可以直接在上层beans元素中声明default-init-method和default-destory-method属性,从而避免每一个都要设置一遍的问题。

    示例:
    1、程序结构:

    2、简单的Spring装配

    Performer.java接口

    //<start id="performer_java" /> 
    package com.springinaction.springidol;
    public interface Performer {
      void perform() throws PerformanceException;
    }
    //<end id="performer_java" /> 
    

    Juggler.java实现类

    //<start id="juggler_java" /> 
    package com.springinaction.springidol;
    public class Juggler implements Performer {
      private int beanBags = 3;
      public Juggler() {
      }
      public Juggler(int beanBags) {
        this.beanBags = beanBags;
      }
      public void perform() throws PerformanceException {
        System.out.println("JUGGLING " + beanBags + " BEANBAGS");
      }
    }
    //<end id="juggler_java" />
    

    spring-idol.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"
     xmlns:util="http://www.springframework.org/schema/util"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    
      <bean id="duke" 
          class="com.springinaction.springidol.Juggler" />
    </beans>
    

    JugglerTest.java测试类

    package com.springinaction.springidol;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    /**
     * Created by LTN on 2016/4/17.
     */
    public class JugglerTest {
        public static void main(String[] args) throws  Exception{
            ApplicationContext context =new  ClassPathXmlApplicationContext("com/springinaction/springidol/spring-idol.xml");
            Performer performer = (Performer) context.getBean("duke");
    //        Performer performer = (Performer) context.getBean("poeticDuke");
            performer.perform();
        }
    }
    

    3、有参数的装配过程
    PoeticJuggler.java
    其构造器需要一个int和Poem的参数

    //<start id="poeticjuggler_java" /> 
    package com.springinaction.springidol;
    public class PoeticJuggler extends Juggler {
      private Poem poem;
      public PoeticJuggler(Poem poem) { //<co id="co_injectPoem"/>
        super();
        this.poem = poem;
      }
      public PoeticJuggler(int beanBags, Poem poem) { // <co id="co_injectPoemBeanBags"/>
        super(beanBags);
        this.poem = poem;
      }
      public void perform() throws PerformanceException {
        super.perform();
        System.out.println("While reciting...");
        poem.recite();
      }
    }
    //<end id="poeticjuggler_java" />
    
    

    参数在xml文件中,需要以下配置:

     <constructor-arg value="15" />
     <constructor-arg ref="sonnet29" />
    

    value可以指定基本类型;
    ref是引用其他的bean定义。

    Poem.java接口

    //<start id="poem_java" /> 
    package com.springinaction.springidol;
    public interface Poem {
      void recite();
    }
    //<end id="poem_java" />
    

    Sonnet29.java实现类

    //<start id="sonnet29_java" /> 
    package com.springinaction.springidol;
    public class Sonnet29 implements Poem {
      private static String[] LINES = {
          "When, in disgrace with fortune and men's eyes,",
          "I all alone beweep my outcast state",
          "And trouble deaf heaven with my bootless cries",
          "And look upon myself and curse my fate,",
          "Wishing me like to one more rich in hope,",
          "Featured like him, like him with friends possess'd,",
          "Desiring this man's art and that man's scope,",
          "With what I most enjoy contented least;",
          "Yet in these thoughts myself almost despising,",
          "Haply I think on thee, and then my state,",
          "Like to the lark at break of day arising",
          "From sullen earth, sings hymns at heaven's gate;",
          "For thy sweet love remember'd such wealth brings",
          "That then I scorn to change my state with kings." };
      public Sonnet29() {
      }
      public void recite() {
        for (int i = 0; i < LINES.length; i++) {
          System.out.println(LINES[i]);
        }
      }
    }
    //<end id="sonnet29_java" />
    

    spring-idol.java配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:util="http://www.springframework.org/schema/util"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
      <!--<start id="duke_bean" />--> 
      <bean id="duke" 
          class="com.springinaction.springidol.Juggler" />
      <!--<end id="duke_bean" />-->
      <!--<start id="poeticduke_bean" />--> 
      <bean id="poeticDuke"
          class="com.springinaction.springidol.PoeticJuggler">
        <constructor-arg value="15" />
        <constructor-arg ref="sonnet29" />
      </bean>
      <!--<end id="poeticduke_bean" />-->
      
      <!--<start id="sonnet29_bean" />--> 
      <bean id="sonnet29"
          class="com.springinaction.springidol.Sonnet29" />
      <!--<end id="sonnet29_bean" />-->
    </beans>
    
  • 相关阅读:
    什么是test-time argument(测试数据增强)
    在k3d上快速安装Istio,助你在本地灵活使用K8S!
    IoT设备实践丨如果你也在树莓派上部署了k3s,你也许需要这篇文章
    k3s原理分析丨如何搞定k3s node注册失败问题
    仅需60秒,使用k3s创建一个多节点K8S集群!
    手把手实操教程!使用k3s运行轻量级VM
    k3s首季在线培训来袭!本周四晚,线上见!
    k3s新版本发布!支持Helm3!还有其他重要更新Highlight!
    如何优雅地使用containerd?这里有一份必读的技巧攻略
    图解拥塞控制,这应该是把拥塞控制讲的最通俗易懂的文章了
  • 原文地址:https://www.cnblogs.com/myitroad/p/5547551.html
Copyright © 2011-2022 走看看