《Spring实战》-第二章:Bean的装配(1)-XML显式装配

慢慢来比较快,虚心学技术

前言:创建应用对象之间协作关系的行为通常称为装配( wiring ),这也是依赖注入( DI )的本质

Spring提供三种Bean装配机制:

  1. 在 XML 中进行显式配置。
  2. 在 Java 中进行显式配置
  3. 隐式的 bean 发现机制和自动装配

*原文连接:https://blog.csdn.net/Laiguanfu/article/details/88046259

本文简单讲解Spring中使用xml方式进行显式配置装配Bean的步骤和内容分析

使用xml进行Bean的装配是Spring最原始也是持续时间最长的装配方式,该配置文件使用作为根节点,配置处于应用内的Bean。

一、简单使用

本文使用最简单的配置,只为记录xml显式装配bean的实现,maven引用如下(其中${org.springframework.version}可替换成任意版本):



     org.springframework
     spring-core
     ${org.springframework.version}



      org.springframework
      spring-context
      ${org.springframework.version}



       org.springframework
       spring-test
       ${org.springframework.version}

①编写基础类CDBean代码

public class CDBean {

    /**
     * 定义CD名
     */
    private String title;

    /**
     * 定义CD作者
     */
    private String author;

}

②编写接口类CDPlayer

public interface CDPlayer {

    /**
     * 定义方法播放CD
     *  @param
     *       
     * @return void
     *       
     * @author xxx 2019/2/27
     * @version 1.0
     **/
    void playCD();

}

③编写接口实现类,同时将CDBean作为属性通过setter方法传入

public class CDPlayerImpl implements CDPlayer {

    private CDBean cdBean;

    public void setCDBean(CDBean cdBean){
        this.cdBean = cdBean;
    }

    @Override
    public void playCD() {
        System.out.println("正在播放:"+cdBean.getTitle()+" by "+cdBean.getAuthor());
    }
}

④创建XML配置文件application.xml(命名随意)

注:IDEA中可以选择使用默认的File菜单快速创建Spring默认简单格式的配置文件

idea添加spring配置文件

得到简单格式的xml文件如下





⑤使用节点配置CDBean并使用节点进行属性默认值注入




    
    
        
        
        
    


⑥ 用节点配置CDPlayer并使用节点进行属性默认值注入




    
        
        
    

    
        
        
    

⑦通过上一篇文章提及的获取配置文件应用上下文ClassPathXmlApplicationContext中获取目标bean并进行测试

public class App 
{
    public static void main(String[] args) {
        /**
         * 从根目录的application.xml文件中构建应用上下文
         */
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/application.xml");

        /**
        *从应用上下文中获取所有bean的类名
        */
        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
        for (String className : beanDefinitionNames){
            System.out.println(className);
        }

        /**
         * 从应用上下文中提取目标实体
         */
        CDPlayer cdPlayer = applicationContext.getBean(CDPlayer.class);

        /**
         * 执行方法进行测试
         */
        cdPlayer.playCD();
    }
}

⑧测试结果,cdBean和cdPlayer成功装配,且cdBean默认属性注入和cdPlayer的cdBean属性依赖注入成功

cdBean
cdPlayer
正在播放:The World!! by Mr.D

二、xml文件分析

节点:装配Bean的根本性节点

|======属性 class -------注明当前装配的Bean的class类型

|======属性 id -------为当前装配的Bean添加一个唯一性标识

|======属性 name-------为当前装配的Bean添加一个别名,可等同id

|======属性 parent -------指定当前装配的Bean的父类在xml文件中对应的name/id


|======子节点 : 为bean注入属性操作而服务

|===========属性 name ------对应于Bean实体中的属性名称

|===========属性 value ------name指定属性的默认字面量值

|===========属性 **ref **-------name指定属性同样是一个被装配的类,ref的值是目标Bean的id


        
        

|======子节点 : 从bean的构造函数中注入参数(以下)
|===========属性 name ------对应于构造函数中的参数名称
|===========属性 value ------name指定参数的默认字面量值
|===========属性 ref -------name指定参数同样是一个被装配的类,ref的值是目标Bean的id
|===========属性 index ------指定当前参数在构造函数中的下标
|===========属性 type ------指定目标参数的类型


     
     
     
     

三、属性注入

简单示例里面的注入方式,实际上使用的是bean里面的setter方法注入,要求对应属性在bean中必须存在setter方法,否则无法注入
使用构造器注入

public class CDPlayerImpl implements CDPlayer {
    private CDBean cdBean;

    public CDPlayerImpl() {
        super();
    }

    public CDPlayerImpl(CDBean cdBean) {
        super();
        this.cdBean = cdBean;
    }
}

xml配置




    
    
        
        
        
    

    
        
        
    

注入列表参数

此处涉及到节点,用于注入列表或者数组

假设CDPlayerImpl类中有属性cdBeans

public class CDPlayerImpl implements CDPlayer {
    private List cDBeans;

    public void setCDBeans(List cDBeans){
        this.cDBeans = cDBeans;
    }
}

xml配置如下:




    
    
        
        
        
    

     
    
        
        
        
    

    
        
            
                 
                 
            
        
    

注:无论类中使用的是list还是使用set或者数组作为属性,xml中都可以使用list或set进行注入

四、小结

1.spring依靠xml文件进行显式装配,xml文件的根节点是,包含多个节点

2.xml文件中每个bean节点可以指定对应组件的类型,名称

3.xml文件中,通过bean的property子节点实现属性初始化或依赖注入

4.xml文件中,通过bean的constructor-arg子节点实现构造器参数初始化或依赖注入

5.xml文件中,通过property或constructor-arg的子节点实现列表的注入

6.所有通过xml显式配置的bean,在代码中通过上一篇文章所描述的应用上下文实现ClassPathXmlApplicationContext从容器中获取实体

参考文档:

【1】《Spring 实战(第 4 版)》·Craig Walls

你可能感兴趣的:(《Spring实战》-第二章:Bean的装配(1)-XML显式装配)