美文网首页
wire java bean

wire java bean

作者: cdz620 | 来源:发表于2020-03-04 09:41 被阅读0次

    glossary

    bean_id

    • 每个spring Bean都有个bean_id, 默认值类的第一个字母小写,eg:sgtPeppers
    • 给定bean_id:
      @Component("newBeanId")

    base package

    • Component scan 扫描Component注释的包路径
    • 设置:@ComponentScan(basePackages="soundsystem")、或者@ComponentScan("soundsystem")、@ComponentScan(basePackages={"soundsystem", "video"})
    • 推荐设置方式:@ComponentScan(basePackageClasses={CDPlayer.class, DVDPlayer.class}) 避免重构代码引起错误

    Autowired

    • spring 自动发现bean 依赖
    • 自动处理bean间的依赖关系, Autowired可以用在任何的方法
    @Autowired
    public void setCompactDisc(CompactDisc cd) {
      this.cd = cd;
    }
    
    • 当Autowired required方法为False时,代码中必须check null
    @Autowired(required=false)
    public CDPlayer(CompactDisc cd) {
      this.cd = cd;
    }
    

    @RunWith(SpringJUnit4ClassRunner.class)

    测试开始前会自动创建Spring application context

    @ContextConfiguration(classes=CDPlayerConfig.class)

    从CDPlayerConfig加载配置

    automatic wiring

    Component scanning

    spring 自动发现beans,并在application context中创建。使用姿势:

    1. 使用Component 注释
    package soundsystem;
    import org.springframework.stereotype.Component;
    @Component
    public class SgtPeppers implements CompactDisc {
      private String title = "Sgt. Pepper's Lonely Hearts Club Band";
      private String artist = "The Beatles";
      public void play() {
        System.out.println("Playing " + title + " by " + artist);
    } }
    
    1. 使用@ComponentScan enables component scanning
    package soundsystem;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @ComponentScan
    public class CDPlayerConfig { 
    }
    

    @ComponentScan 默认搜索同一个包底下使用@Component的类,找到后并创建

    JavaConfig class

    1. 创建一个配置类

    @Configuration
    public class CDPlayerConfig {
      
      @Bean
      public CompactDisc compactDisc() {
        return new SgtPeppers();
      }
      
      @Bean
      public CDPlayer cdPlayer(CompactDisc compactDisc) {
        return new CDPlayer(compactDisc);
      }
      
    }
    

    2. 声明一个bean

      @Bean
      public CDPlayer cdPlayer(CompactDisc compactDisc) {
        return new CDPlayer(compactDisc);
      }
    

    3. 通过JavaConfig注入

    注入方法:引用bean的方法,这边是指SgtPeppers()构造方法

      @Bean
      public CompactDisc compactDisc() {
        return new SgtPeppers();
      }
    

    XML config

    1. 创建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
        http://www.springframework.org/schema/context">
      <!-- configuration details go here -->
    </beans>
    
    • 必须指明引用的命名空间
    • c-namespace,头部声明:xmlns:c="http://www.springframework.org/schema/c

    2. 用xml声明bean

    <bean id="compactDisc" class="soundsystem.SgtPeppers" />
    

    3. 使用构造方法初始化bean

    • c-namespace demo:
    <bean id="cdPlayer" class="soundsystem.CDPlayer"
          c:_0-ref="compactDisc" />
    
    - `_0` 编译后优化,无法知道具体参数名
    - `c`: c-namespace prefix
    - `-ref`: Injecting a bean reference
    - `"compactDisc"`:The ID of the bean to inject
    
    • <constructor-arg> 比c-namespace功能更全面
    <bean id="compactDisc"
          class="soundsystem.BlankDisc">
      <constructor-arg value="Sgt. Pepper's Lonely Hearts Club Band" />
      <constructor-arg value="The Beatles" />
    </bean>
    

    properties 注入

    两种配置方式:

    • xml
    <bean id="cdPlayer"
          class="soundsystem.CDPlayer">
      <property name="compactDisc" ref="compactDisc" />
    </bean>
    
    • p-namespace
    <bean id="cdPlayer"
          class="soundsystem.CDPlayer"
          p:compactDisc-ref="compactDisc" />
    
    • util-namespace 在xml配置复杂的数据结构,例如:constant, list, map, properties, property-path, set。 一般与p-namespace,c-namespace一起连用

    mixed configuration

    spring container管理所有Bean,不区分是从何种方式初始化的bean。

    • JavaConfig 引用JavaConfig:@Import(CDConfig.class)
    • JavaConfig 引用xmlconfiguration:@ImportResource("classpath:cd-config.xml")
    • xml configuration 引用 xml configuration: <import resource="cdplayer-config.xml" />
    • xml configuration 引用 JavaConfig: <bean class="soundsystem.CDConfig" />
    • xml中autoscan配置:<context:component-scan>
    • 可单独一Java文件或者xml文件,当做root project,集合引用组合所有的config

    相关文章

      网友评论

          本文标题:wire java bean

          本文链接:https://www.haomeiwen.com/subject/tjrjchtx.html