1. 程式人生 > >Spring裝配Bean -- 通過Java程式碼裝配Bean

Spring裝配Bean -- 通過Java程式碼裝配Bean

建立可被發現的Bean:

        建立CD介面:

package main.java.Demo1;

/**
 * @author [email protected]
 * @date 18-4-15 下午6:53
 */

public interface CompactDisc {
    void play();
}
        建立BeatlesCD類實現CD介面:
package main.java.Demo1;

import org.springframework.stereotype.Component;

/**
 * @author [email protected]
* @date 18-4-15 下午8:50 */ public class BeatlesCD implements CompactDisc { @Override public void play() { System.out.println("Playing Beatles"); } }

        建立CDPlayer類引用BeatlesCD例項:

package main.java.Demo1;  
  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Component;  
  
/** 
 * @author 
[email protected]
* @date 18-4-15 下午9:16 */ public class CDPlayer { private CompactDisc cd; public CDPlayer(CompactDisc cd){ this.cd = cd; } public void play(){ cd.play(); } }

       JavaConfig程式碼如下:

package main.java.Demo1;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author 
[email protected]
* @date 18-4-16 上午8:53 */ @Configuration public class CompactDiskConfig2 { @Bean public CompactDisc beatlesCD(){ return new BeatlesCD(); } @Bean public CDPlayer cdPlayer(){ return new CDPlayer(beatlesCD()); } }
        同之前,測試程式碼如下:
package main.java.Demo1;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import static org.junit.Assert.assertNotNull;

/**
 * @author [email protected]
 * @date 18-4-15 下午6:56
 */

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CompactDiskConfig2.class)
public class CDPlayerTest {
    @Autowired
    private BeatlesCD cd;

    @Test
    public void cdShouldNotNull(){
        assertNotNull(cd);
    }

    @Autowired
    private CDPlayer cdPlayer;

    @Test
    public void cdPlayerPlay(){
        cdPlayer.play();
    }
}
        執行cdShouldNotNull,結果如下:
四月 16, 2018 8:56:35 上午 org.springframework.test.context.support.DefaultTestContextBootstrapper getDefaultTestExecutionListenerClassNames
資訊: Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
四月 16, 2018 8:56:36 上午 org.springframework.test.context.support.DefaultTestContextBootstrapper getTestExecutionListeners
資訊: Using TestExecutionListeners: [org.springframework.test[email protected]38082d64, org.springframewor[email protected]dfd3711, org.springfra[email protected]42d3bd8b, org.springframew[email protected]26ba2a48, org.sp[email protected]5f2050f6]
四月 16, 2018 8:56:36 上午 org.springframework.context.support.GenericApplicationContext prepareRefresh
資訊: Refreshing [email protected]82f6ef: startup date [Mon Apr 16 08:56:36 CST 2018]; root of context hierarchy
四月 16, 2018 8:56:38 上午 org.springframework.context.support.GenericApplicationContext doClose
資訊: Closing [email protected]82f6ef: startup date [Mon Apr 16 08:56:36 CST 2018]; root of context hierarchy

Process finished with exit code 0
        執行cdPlayerPaly,結果如下:
四月 16, 2018 8:58:21 上午 org.springframework.test.context.support.DefaultTestContextBootstrapper getDefaultTestExecutionListenerClassNames
資訊: Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
四月 16, 2018 8:58:21 上午 org.springframework.test.context.support.DefaultTestContextBootstrapper getTestExecutionListeners
資訊: Using TestExecutionListeners: [org.springframework.test[email protected]38082d64, org.springframewor[email protected]dfd3711, org.springfra[email protected]42d3bd8b, org.springframew[email protected]26ba2a48, org.sp[email protected]5f2050f6]
四月 16, 2018 8:58:22 上午 org.springframework.context.support.GenericApplicationContext prepareRefresh
資訊: Refreshing [email protected]82f6ef: startup date [Mon Apr 16 08:58:22 CST 2018]; root of context hierarchy
Playing Beatles
四月 16, 2018 8:58:23 上午 org.springframework.context.support.GenericApplicationContext doClose
資訊: Closing [email protected]82f6ef: startup date [Mon Apr 16 08:58:22 CST 2018]; root of context hierarchy

Process finished with exit code 0

        成功輸出"Playing Beatles"(但後面多了一些關閉框架的東西,暫時不懂!),測試成功.

補充:

        [email protected](name="name")可以為Bean命名.

        2.上面設定CDPlayer Bean時還可以用下面這種更簡單的方式:

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

        這種方法可以不明確地引用CompactCD的@Bean方法;這種方法也是最佳的選擇,因為它不會要求將CompactCD宣告到同一個配置類當中,這裡甚至沒有要求CompactCD必須在JavaConfig中宣告,實際上它可以通過元件掃描功能或自動發現或者通過XML進行配置.

        3.上面是使用了CDPlayer的構造器實現了DI功能,但完全可以使用其他風格的DI配置,比如Setter方法,如下:

@Bean
    public CDPlayer cdPlayer(CompactDisc compactDisc){
        CDPlayer cdPlayer = new CDPlayer();
        cdPlayer.setCd(compactDisc);
        return cdPlayer;
    }
        帶有@Bean註解的方法可以採用任何必要的Java功能來產生Bean例項.



相關推薦

Spring裝配Bean -- 通過Java程式碼裝配Bean

建立可被發現的Bean:        建立CD介面:package main.java.Demo1; /** * @author [email protected] * @date 18-4-15 下午6:53 */ public interface C

Spring. 通過Java程式碼裝配bean

儘管在很多情況下通過元件掃描和自動裝配來實現 Spring 的自動化配置是更為推薦的方式,但有時候自動化配置的方案行不通,因此需要明確配置 Spring。比如說你想要將第三方庫中的元件裝配到你的應用中,在這種情況下,是沒辦法在它的類上新增 @Component 和 @Autowired 註解的,

spring javaConfig 配置Bean通過java程式碼裝配Bea)

       儘管在很多場景下通過元件掃描和自動裝配實現spring的自動化裝配時更為推薦的方式。但是有時候自動化配置的方案行不通,因此需要明確配置spring。比如說,你想要將第三方庫中的元件裝配到你的應用中,在這種情況下,是沒有辦法在它的類上新增@Component和@A

SprinvAction學習一、裝配bean通過Java程式碼裝配bean

具體步驟 (1)普通的介面 (2)實現介面的類,該類為需要裝配到spring bean中 (3)配置類,由該類定義bean 示例程式碼: 介面1:(普通的介面) package com.sp

Spring裝配Bean(基於Java程式碼裝配)

                                             通過Java配置裝配Bean 在很多的情況下,Spring基於組建掃描和自動裝配是最佳方式。但是有時候,我們必須使用顯示的裝配。例如,我們使用一個第三方庫,我們不可能為庫中的類添加註釋

spring自動裝配通過java實現裝配

ati 三方庫 autowired 模式 限定 程序 str primary java實現 1.組建掃描 在類上添加註解@Component註解可以實現組建掃描 @Component public class A{ ... } 2.自動裝配 通過在屬性上或者方

Spring裝配之——JAVA程式碼裝配Bean

首先建立幾個普通的JAVA物件,用於測試JAVA程式碼裝配bean的功能。 1 package soundsystemJava; 2 3 //作為介面 定義了CD播放器對一盤CD所能進行的操作 4 public interface CD { 5 void play(); 6

第2章—裝配Bean通過java代碼裝配bean

兩種 imp player 內容 BE TE 如何實現 代碼 組件 通過java代碼裝配bean ? 在進行顯式裝配的時候,有兩種選型方案:java和XML配置,這裏先介紹java的配置方式. 2.3.1創建配置類 先復習下上一章的配置內容: @Configuration

Spring Boot 使用Java程式碼建立Bean並註冊到Spring

從 Spring3.0 開始,增加了一種新的途經來配置Bean Definition,這就是通過 Java Code 配置 Bean Definition。 與Xml和Annotation兩種配置方式不同點在於: 前兩種Xml和Annotation的配置方式

41. Spring Boot 使用Java程式碼建立Bean並註冊到Spring中【從零開始學Spring Boot】

【視訊&交流平臺】 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=40000000

ETL-kettle通過java程式碼傳遞引數,呼叫job呼叫轉換

定義變數,以表輸入為例,定義變數名稱為${變數名},這裡用test為變數名。並且勾選sql語句變數 package demo; import org.pentaho.di.core.KettleEnvironment; import org.pentaho.di.core.datab

zookeeper - 通過java程式碼連線zookeeper(2)

首先建立一個Maven專案 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www

通過java程式碼執行shell命令的小案列

一 需求描述: 通常我們操作linux伺服器都是通過遠端連線工具,比如:SecureCRT,Xmanager等工具,在其上輸入命令來完成一些工作,但是在實際工作中,有些時候需要我們通過java程式碼遠端連線到linux伺服器執行一些shell命令,包括叢集的狀

jdbc 中通過Java程式碼連線資料庫

示例程式碼 1.通過建立一個類  寫出連線資料庫的相關屬性 username,password,URL,Connection Statement . Resultset 物件 2.載入並註冊MySQL的驅動——在Java程式中,可以通過 “Class.forName(“

通過Java程式碼自動釋出Geoserver的地圖服務WMS

import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; import java.io.*; import java.n

MongoDB 通過 Java 程式碼 CRUD 資料庫與集合

本文導讀 相比 Java 操作 關係型資料庫(如 Mysql) 而言,Java  操作 noSql 更加簡單,因為沒有事務這些操作 Java 操作 Mysql 資料庫需要 Mysql 的連線驅動包,同理 Java 操作 MongoDB 也需要連線驅動包,叫 mongo-j

Spring MVC 典型分層Java程式碼生成工具

本文目的: 企業應用開發實際過程中必不可少的步驟是對資料庫表進行增刪查改,相應的java程式碼基本實現都需要不停拼接資料庫欄位。為了減少程式設計師重複勞動,本文嘗試編寫工具類基於資料表字段生成基本的java的實體類模板,controller類模板,ser

通過java程式碼獲取jvm資訊和系統資訊

轉載自LOC_Thomas的部落格 前言 隨著微服務的概念逐漸流行,監控成了必不可少的模組,本篇文章主要介紹一下如何通過java程式碼獲得一些核心的資料,方便從各個方面對應用進行監控 獲取jvm資料 jvm資料是監控應用很重要的一系列引數,一般本地開發的時候可以通過jcons

微信公眾號開發-開發環境搭建並通過java程式碼獲取微信access_token

進入開發文件: 獲取access token access_token是公眾號的全域性唯一票據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善儲存。access_token的儲存至少要保留512個字元空間。access_token的有效期目前為2

hadoop入門之通過java程式碼實現將本地檔案上傳到hadoop的檔案系統

package upload;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.URI