初始化時引用java註解配置bean或xml配置bean

本文參考自:《Spring實戰(第4版)》

 

一、初始化時java註解引用xml中配置的bean

關鍵註解:@ImportResource,下面舉例CD播放器配置中引入CD的配置信息

 CD播放器配置類:

/**
 * @Author river66
 * @Date 2020/4/4 22:21
 * <p>
 * CD播放器配置類
 */
@Configuration
@ImportResource("classpath:cd-config.xml")
public class CDPlayerConfig {

    @Bean
    public CDPlayer cdPlayer(CD cd) {
        return new CDPlayer(cd);
    }
}

CD類配置文件(根類路徑):cd-config.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-4.0.xsd">

    <bean class="com.river.boot.bean.JayChouCD">
        <property name="albumName" value="《七里香》"/>
    </bean>
</beans>

CD接口:

/**
 * @Author river66
 * @Date 2020/4/4 22:18
 * <p>
 * CD 唱片接口
 */
public interface CD {
    void play();
}

具體的CD類:

import com.river.boot.interfaces.CD;
import lombok.Data;

/**
 * @Author river66
 * @Date 2020/4/4 22:26
 * <p>
 * 周杰倫唱片
 */
@Data
public class JayChouCD implements CD {
    private static final String author = "Jay Chou";

    /**
     * 專輯名稱
     */
    private String albumName;

    @Override
    public void play() {
        System.out.println(author + "'s album: " + albumName);
    }
}

 CD播放器:

/**
 * @Author river66
 * @Date 2020/4/4 22:24
 * <p>
 * CD播放器
 */
public class CDPlayer {
    private CD cd;

    public CDPlayer(CD cd) {
        this.cd = cd;
    }

    public void play() {
        cd.play();
    }
}

測試打印:

Jay Chou's album: 《七里香》

 

二、初始化時在xml配置文件中引用java註解配置的bean

事實上,<import>元素只能導入其他的XML配置文件,並沒有XML元素能夠導入JavaConfig類(標有:@Configuration的類

<import resource="classpath:cd-config.xml"/>

 但是,有一個你已經熟知的元素能將Java配置導入到XML配置中:<bean>元素。爲了將JavaConfig類導入到XML配置中。

xml配置文件: cd-player-config.xml(刪除上面的CDPlayerConfig.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:c="http://www.springframework.org/schema/c"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

    <bean class="com.river.boot.config.CDConfig"/>
    <bean id="cdPlayer"
          class="com.river.boot.bean.CDPlayer"
          c:cd-ref="jayChouCD"/>
</beans>

 說明:

屬性名以c:”開頭,也就是命名空間的前綴。接下來就是要裝配的構造器參數名(也就是CDPlayer中的構造函數參數名:cd),在此之後是“-ref,這是一個命名的約定,它會告訴 Spring,正在裝配的是一個bean的引用,這個bean的名字是jayChouCD,而不是字面量“jayChouCD”很顯然,使用c-命名空間屬性要比使用<constructor-arg>元素簡練得多。
 
java配置文件:CDConfig.java刪除上面的cd-config.xml文件
**
 * @Author river66
 * @Date 2020/4/4 22:15
 */
@Configuration
@ImportResource("classpath:cd-player-config.xml")
public class CDConfig {

    /**
     * 周杰倫CD唱片
     */
    @Bean
    public CD jayChouCD() {
        JayChouCD cd = new JayChouCD();
        cd.setAlbumName("《十一月的肖邦》");
        return cd;
    }
}

測試打印:

Jay Chou's album: 《十一月的肖邦》

 
 

覺得有用的老鐵點個讚唄~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章