成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java學習筆記

fevin / 334人閱讀

摘要:構造函數(shù)方法進行依賴注入注入的效率最高新建方法電源供電中。。。。。無參數(shù)構造函數(shù)選創(chuàng)建有參的構造函數(shù)有參數(shù)構造函數(shù)多參數(shù)構造函數(shù)。。。。

一、Spring基礎 1.Spring簡介 1.1 核心概念
序號 概念 全稱 具體內容
1 IoC Inversion of Control (控制反轉) 對象創(chuàng)建和對象關系管理權限,由開發(fā)者轉為spring
2 DI Dependency Injection(依賴注入) 對象的依賴關系的創(chuàng)建過程
3 AOP Aspect Oriented Programming(面向切面編程)

功能模塊組成:

模塊 功能 備注
Core IoC,DI 功能實現(xiàn)最基本實現(xiàn) 核心模塊
Beans Bean工廠(創(chuàng)建對象的工廠) 核心模塊
Context IoC容器,上下文 核心模塊
SpEL spring 表達式語言 核心模塊
JDBC JDBC封裝 數(shù)據(jù)訪問集成模塊
ORM 數(shù)據(jù)集成框架封裝,jpa jdo 數(shù)據(jù)訪問集成模塊
OXM 實現(xiàn)對象和xml轉換 數(shù)據(jù)訪問集成模塊
JMS 生產消費實現(xiàn) 數(shù)據(jù)訪問集成模塊
Transactions 事務管理 數(shù)據(jù)訪問集成模塊
web web監(jiān)聽,初始化ioc容器,上傳等 web模塊
webSocket webSocket開發(fā) web模塊
Servlet spring MVC web模塊
Portlet 內容集成 聚合 web模塊
AOP AOP相關
Aspects Aspects面向切面編程
Instrumentation 設備相關
Messaging 消息相關
Test 測試模塊

spring 包含spring MVC

1.2 相關參數(shù)解析
名稱 用途 備注 類型
private 聲明成員變量
有參的構造函數(shù) 關聯(lián)成員變量和無參構造函數(shù)的關系
public void play() 構造一個方法play,執(zhí)行具體邏輯
@Autowired 自動滿足bean之間的依賴 自動裝配,自動注入注解 定義組件
@Transactional @Transactional 可以作用于接口、接口方法、類以及類方法上。當作用于類上時,該類的所有 public 方法將都具有該類型的事務屬性,同時,我們也可以在方法級別使用該標注來覆蓋類級別的定義。 但是 Spring 建議不要在接口或者接口方法上使用該注解,因為這只有在使用基于接口的代理時它才會生效。另外, @Transactional 注解應該只被應用到 public 方法上 事務管理
@Component 表示這個累需要在應用程序中被創(chuàng)建,被掃描 被spring上下文發(fā)現(xiàn),自動發(fā)現(xiàn)注解 定義組件
@ComponentScanTransactional 自動發(fā)現(xiàn)應用程序中創(chuàng)建的類 自動掃描Component類 定義配置
@Configuration 表示當前類是一個配置類 標注類為配置類 定義配置
@Test 表示當前類是一個測試類
@RunWith(SpringJUnit4ClassRunner.class) 引入Spring單元測試模塊 聲明使用SpringJUnit4ClassRunner.class 測試單元 spring測試環(huán)境
@ContextConfiguration(classes = AppConfig.class) 加載配置類 spring測試環(huán)境
@Primary 首選bean 設置實現(xiàn)類的首選 自動裝配歧義性
@Qualifier 給bean做注解 調用的時候可以通過注解區(qū)分實現(xiàn)類 自動裝配歧義性
@Resource @Resource 相當于@Autowired + @Qualifier("userServiceNormal") java標準 自動裝配歧義性
@Repository 標注數(shù)據(jù)dao實現(xiàn)類 本質和@Component沒有區(qū)別,只是更加明確 分層架構中定義組件
@Service 標注Service實現(xiàn)類 本質和@Component沒有區(qū)別,只是更加明確 分層架構中定義組件
@Controller 標注web、controller實現(xiàn)類, API接口 本質和@Component沒有區(qū)別,只是更加明確 分層架構中定義組件
@Bean 當前配置類為默認配置類,自動調用
@Override 重寫,重載 自雷重寫父類的方法
@RequestMapping 是一個用來處理請求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。 配置url映射
@RestController 是@ResponseBody和@Controller的組合注解
Extends-繼承類 全盤繼承 在類的聲明中,通過關鍵字extends來創(chuàng)建一個類的子類。 對于class而言,Extends用于(單)繼承一個類(class)
implements-實現(xiàn)接口 給這個類附加額外的功能 實現(xiàn)接口就是在接口中定義了方法,這個方法要你自己去實現(xiàn),接口可以看作一個標準,比如定義了一個動物的接口,它里面有吃(eat())這個方法,你就可以實現(xiàn)這個方法implements,這個方法是自己寫,可以是吃蘋果,吃梨子,香蕉,或者其他的。implements就是具體實現(xiàn)這個接口 implements用于實現(xiàn)一個接口(interface)
DAO DAO是傳統(tǒng)MVC中Model的關鍵角色,全稱是Data Access Object。DAO直接負責數(shù)據(jù)庫的存取工作,乍一看兩者非常類似,但從架構設計上講兩者有著本質的區(qū)別: DAO則沒有擺脫數(shù)據(jù)的影子,仍然停留在數(shù)據(jù)操作的層面上,DAO則是相對數(shù)據(jù)庫而言
Repository Repository蘊含著真正的OO概念,即一個數(shù)據(jù)倉庫角色,負責所有對象的持久化管理。 Repository是相對對象而言, https://segmentfault.com/a/11...

接口:

接口一般是只有方法聲明沒有定義的。

接口可以比作協(xié)議,比如我說一個協(xié)議是“殺人”那么這個接口你可以用 砍刀去實現(xiàn),至于怎么殺砍刀可以去實現(xiàn),當然你也可以用搶來實現(xiàn)殺人接口,但是你不能用殺人接口去殺人,因為殺人接口只不過是個功能說明,是個協(xié)議,具體怎么干,還要看他的實現(xiàn)類。那么一個包里面如果有接口,你可以不實現(xiàn)。這個不影響你使用其他類。

1.3 for 循環(huán)

this.tracks.for + Enter 可以快速得到for循環(huán)

        for (String track : this.tracks) {
            System.out.println("音樂:" + track);
        }
2.Component對象

2.1 創(chuàng)建maven項目

2.2 創(chuàng)建基礎目錄

2.3 配置pom.xml



    4.0.0

    com.xfedu
    spring01
    1.0-SNAPSHOT

    
        
            org.springframework
            spring-context
            4.3.13.RELEASE
        

    

2.4 編寫純java版本代碼

編寫MessagesService

package hello;


public class MessagesService {

    /**
     * 執(zhí)行打印功能
     * @return返回要打印的字符串
     */
    public String getMessage(){

        return "hello world!";
    }
}

編寫MessagePrinter

package hello;

public class MessagePrinter {

    /**
     * private 建立MessagePrinter 和 MessagesService 關聯(lián)關系
     */
    private MessagesService service;

    /**
     * service setter 方法 選擇service 按住alt+insert 選擇setter
     * 設置service的值
     * @param service
     */
    public void setService(MessagesService service) {
        this.service = service;
    }

    public void  printMessage(){

        System.out.println(this.service.getMessage());
    }
}

編寫Application

package hello;


/**
 * 創(chuàng)建Application來調用MessagePrinter類
 */
public class Application {

    public static void main(String[] args) {

        System.out.println("application");

        //創(chuàng)建打印機對象
        MessagePrinter printer = new MessagePrinter();
        //創(chuàng)建消息服務對象
        MessagesService service = new MessagesService();
        //設置打印機的service屬性
        printer.setService(service);

        //打印消息
        printer.printMessage();

    }
}

2.5 編寫spring 框架版本代碼

編寫MessagesService

package hello;

import org.springframework.stereotype.Component;

/**
 * @Component通知spring容器,
 * 應用程序的對象(MessagesService)未來會通過spring容器自動創(chuàng)建出來
 * 不需要程序員通過new關鍵字來創(chuàng)建
 */
@Component
public class MessagesService {

    /**
     * ctrl+o 創(chuàng)建無參構造的方法(object)
     *
     */
    public MessagesService() {
        super();
        System.out.println("MessageServer....");
    }

    /**
     * 執(zhí)行打印功能
     * @return返回要打印的字符串
     */
    public String getMessage(){

        return "hello world!";
    }
}

編寫MessagePrinter

package hello;

import org.springframework.stereotype.Component;

/**
 * @Component通知spring容器,
 * 應用程序的對象(MessagePrinter)未來會通過spring容器自動創(chuàng)建出來
 * 不需要程序員通過new關鍵字來創(chuàng)建
 */
@Component
public class MessagePrinter {

    /**
     * ctrl+o 創(chuàng)建無參構造的方法(object)
     *
     */
    public MessagePrinter() {
        super();
        System.out.println("MessagePrinter");

    }

    /**
     * private 建立MessagePrinter 和 MessagesService 關聯(lián)關系
     */
    private MessagesService service;

    /**
     * service setter 方法 選擇service 按住alt+insert 選擇setter
     * 設置service的值
     * @param service
     */
    public void setService(MessagesService service) {
        this.service = service;
    }

    public void  printMessage(){

        System.out.println(this.service.getMessage());
    }
}

編寫ApplicationSpring

package hello;


import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * 創(chuàng)建Application來調用MessagePrinter類
 * @ComponentScan 掃描@Component注解的類
 */
@ComponentScan
public class ApplicationSpring {

    public static void main(String[] args) {



        System.out.println("application");
//
//        //創(chuàng)建打印機對象
//        MessagePrinter printer = new MessagePrinter();
//        //創(chuàng)建消息服務對象
//        MessagesService service = new MessagesService();
//        //設置打印機的service屬性
//        printer.setService(service);
//
//        //打印消息
//        printer.printMessage();

        //初始化Spring容器
        ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationSpring.class);

    }
}

優(yōu)點:通過 * @ComponentScan 掃描@Component注解的類,創(chuàng)建對象的時候就可以不用重新new

3.對象裝配注入Bean 3.1 Bena裝配(注入)的三種方式 3.1.1 隱式的bean發(fā)現(xiàn)機制和自動裝配(主流)
1 簡單案列
package hello;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * 創(chuàng)建Application來調用MessagePrinter類
 * @ComponentScan 掃描@Component注解的類
 */
@ComponentScan
public class ApplicationSpring {

    public static void main(String[] args) {



        System.out.println("application");
//
//        //創(chuàng)建打印機對象
//        MessagePrinter printer = new MessagePrinter();
//        //創(chuàng)建消息服務對象
//        MessagesService service = new MessagesService();
//        //設置打印機的service屬性
//        printer.setService(service);
//
//        //打印消息
//        printer.printMessage();

        //初始化Spring容器
        ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationSpring.class);

        //從容器中獲取MessagePrinter對象
        MessagePrinter printer = context.getBean(MessagePrinter.class);
        //從容器中獲取MessagesService對象
        MessagesService service = context.getBean(MessagesService.class);

        System.out.println(printer);
        System.out.println(service);

        //設置打印機的service屬性,printer和service 建立關聯(lián)關系
        printer.setService(service);
        //打印消息調用printMessage打印
        printer.printMessage();
    }
}

從Context中獲取class

ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationSpring.class);

如何在對象中獲取對象

//從容器中獲取MessagePrinter對象,使用context.getBean方法
MessagePrinter printer = context.getBean(MessagePrinter.class);

如何建立對象的關聯(lián)關系

//設置打印機的service屬性,printer和service 建立關聯(lián)關系
printer.setService(service);
2. 完整的案列

1.定義CompactDisc類,

內置CompactDisc無參構造函數(shù)

paly方法

用@Component包裝

2.定義CDPlayer

內置CDPlayer無參數(shù)構造函數(shù)

聲明CompactDisc

構建有參構造函數(shù)關聯(lián)CDPlayer和CompactDisc,利用@Autowired進行關聯(lián)自動管理

定義play方法

3.定義執(zhí)行main函數(shù)

先通過AnnotationConfigApplicationContext 查出類

執(zhí)行paly方法

利用@ComponentScan包裝,進行自動組件掃描

4.解耦組件掃描和主類

將注解和主類解耦,多帶帶新建配置類AppConfig

CompactDisc

package soundsystem;

import org.springframework.stereotype.Component;

@Component
public class CompactDisc {

    public CompactDisc() {
        super();
        System.out.println("CompactDisc無參構造函數(shù)");
    }

    public void play(){

        System.out.println("正在播放音樂......");
    }
}

CDPlayer

package soundsystem;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Component 讓他能被spring上下文發(fā)現(xiàn)
 */

@Component
public class CDPlayer {

    /**
     *private 成員變量
     */
    private CompactDisc cd;

    public CDPlayer() {
        super();
        System.out.println("CDPlayer無參數(shù)構造函數(shù)");
    }

    /**
     * Ctrl + Insert 選(Constructor)創(chuàng)建有參的構造函數(shù)
     * @param
     */

    @Autowired
    public CDPlayer(CompactDisc cd) {
        this.cd = cd;
        System.out.println("CDPlayer有參數(shù)構造函數(shù)");
    }

    /**
     * 定義一個方法play,執(zhí)行cd.play()播放工作
     */
    public void play(){
        cd.play();

    }
}

App

package soundsystem;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan
public class App {

    public static void main(String[] args) {
         ApplicationContext context = new AnnotationConfigApplicationContext(App.class);
        CDPlayer player = context.getBean(CDPlayer.class);

        player.play();
    }
}

將注解和主類解耦,多帶帶新建配置類AppConfig

AppConfig

這里就配置類掃描@ComponentScan 和@Configuration 注解

package soundsystem;


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


/**
 * 這就是一個配置類
 */

@Configuration
@ComponentScan
public class AppConfig {
    public AppConfig() {
        super();
        System.out.println("配置類,用于將注解和主類解耦");
    }
}

App

這里就將@ComponentScan注解取消了

package soundsystem;


import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class App {

    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        CDPlayer player = context.getBean(CDPlayer.class);

        player.play();
    }

}
3.1.2 在XML進行顯示

applicationContext.xml




    
    
    
        
        
    

MessagePrinter

package hello;

/**
 * @Component通知spring容器,
 * 應用程序的對象(MessagePrinter)未來會通過spring容器自動創(chuàng)建出來
 * 不需要程序員通過new關鍵字來創(chuàng)建
 */

public class MessagePrinter {

    /**
     * ctrl+o 創(chuàng)建無參構造的方法(object)
     *
     */
    public MessagePrinter() {
        super();
        System.out.println("MessagePrinter");

    }

    /**
     * private 建立MessagePrinter 和 MessagesService 關聯(lián)關系
     */
    private MessagesService service;

    /**
     * service setter 方法 選擇service 按住alt+insert 選擇setter
     * 設置service的值
     * @param service
     */
    public void setService(MessagesService service) {
        this.service = service;
    }

    public void  printMessage(){
        System.out.println(this.service.getMessage());
    }
}

MessagesService

package hello;

/**
 * @Component通知spring容器,
 * 應用程序的對象(MessagesService)未來會通過spring容器自動創(chuàng)建出來
 * 不需要程序員通過new關鍵字來創(chuàng)建
 */

public class MessagesService {

    /**
     * ctrl+o 創(chuàng)建無參構造的方法(object)
     *
     */
    public MessagesService() {
        super();
        System.out.println("MessageServer....");
    }

    /**
     * 執(zhí)行打印功能
     * @return返回要打印的字符串
     */
    public String getMessage(){

        return "hello world!";
    }
}

ApplicationSpring

package hello;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 創(chuàng)建Application來調用MessagePrinter類
 * @ComponentScan 掃描@Component注解的類
 */

public class ApplicationSpring {

    public static void main(String[] args) {

        System.out.println("application");
        
         //初始化Spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        //從容器中獲取MessagePrinter對象
        MessagePrinter printer = context.getBean(MessagePrinter.class);

        //打印消息調用printMessage打印
        printer.printMessage();
    }
}

聲明使用xml文件

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

3.1.3 在java中進行顯示 3.2 Autowired 使用場景

用于管理對象之間的關聯(lián)關系

3.2.1 簡單的依賴注入例子

MessagePrinter

package hello;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @Component通知spring容器,
 * 應用程序的對象(MessagePrinter)未來會通過spring容器自動創(chuàng)建出來
 * 不需要程序員通過new關鍵字來創(chuàng)建
 */
@Component
public class MessagePrinter {

    /**
     * ctrl+o 創(chuàng)建無參構造的方法(object)
     *
     */
    public MessagePrinter() {
        super();
        System.out.println("MessagePrinter");

    }

    /**
     * private 建立MessagePrinter 和 MessagesService 關聯(lián)關系
     */
    private MessagesService service;

    /**
     * service setter 方法 選擇service 按住alt+insert 選擇setter
     * 設置service的值
     * @param service
     * @Autowired 用于spring管理對象之間的關聯(lián)關系
     */

    @Autowired
    public void setService(MessagesService service) {
        this.service = service;
    }

    public void  printMessage(){

        System.out.println(this.service.getMessage());
    }
}

ApplicationSpring

package hello;


import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * 創(chuàng)建Application來調用MessagePrinter類
 * @ComponentScan 掃描@Component注解的類
 */
@ComponentScan
public class ApplicationSpring {

    public static void main(String[] args) {



        System.out.println("application");
//
//        //創(chuàng)建打印機對象
//        MessagePrinter printer = new MessagePrinter();
//        //創(chuàng)建消息服務對象
//        MessagesService service = new MessagesService();
//        //設置打印機的service屬性
//        printer.setService(service);
//
//        //打印消息
//        printer.printMessage();

        //初始化Spring容器
        ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationSpring.class);

        //從容器中獲取MessagePrinter對象
        MessagePrinter printer = context.getBean(MessagePrinter.class);
        //從容器中獲取MessagesService對象
        //MessagesService service = context.getBean(MessagesService.class);

        //System.out.println(printer);
        //System.out.println(service);

        //設置打印機的service屬性,printer和service 建立關聯(lián)關系
        //printer.setService(service);
        //打印消息調用printMessage打印
        printer.printMessage();
    }
}

注解:使用@Autowired管理對象之間的關聯(lián)關系,這樣就可以自動處理關聯(lián)關系。

3.2.2 構造函數(shù)方法進行依賴注入

注入的效率最高

Power 新建power方法

package soundsystem;

import org.springframework.stereotype.Component;

@Component
public class Power {
    public Power() {
        super();

    }

    public void supply(){
        System.out.println("電源供電中。。。。。");
    }
}

CDPlayer 增加power注入

package soundsystem;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Component 讓他能被spring上下文發(fā)現(xiàn)
 */

@Component
public class CDPlayer {

    /**
     *private 成員變量
     */
    private CompactDisc cd;

    private Power power;

    public CDPlayer() {
        super();
        System.out.println("CDPlayer無參數(shù)構造函數(shù)");
    }

    /**
     * Ctrl + Insert 選(Constructor)創(chuàng)建有參的構造函數(shù)
     * @param
     */

//    @Autowired
//    public CDPlayer(CompactDisc cd, Power power) {
//        this.cd = cd;
//        this.power = power;
//        System.out.println("CDPlayer多參數(shù)構造函數(shù)");
//    }

    @Autowired
    public CDPlayer(CompactDisc cd, Power power) {
        this.cd = cd;
        this.power = power;
        System.out.println("CDPlayer多參數(shù)構造函數(shù)。。。。");
    }

    /**
     * 定義一個方法play,執(zhí)行cd.play() power.supply();播放工作
     */
    public void play(){
        power.supply();
        cd.play();
    }
}

CompactDisc 無修改

package soundsystem;

import org.springframework.stereotype.Component;

@Component
public class CompactDisc {

    public CompactDisc() {
        super();
        System.out.println("CompactDisc無參構造函數(shù)");
    }

    public void play(){

        System.out.println("正在播放音樂......");
    }
}

AppConfig 無修改

package soundsystem;


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


/**
 * 這就是一個配置類
 */

@Configuration
@ComponentScan
public class AppConfig {
    public AppConfig() {
        super();
        System.out.println("配置類,用于將注解和主類解耦");
    }
}

AppTest 無修改

package soundsystem;

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;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class AppTest {

    @Autowired
    private CDPlayer player;

    @Test
    public void testPlay(){

        player.play();
    }

}
3.2.3 用成員變量的方式進行依賴注入

這個方式就是spring通過反射機制做的依賴注入

注入效率低,但是簡潔

package soundsystem;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Component 讓他能被spring上下文發(fā)現(xiàn)
 */

@Component
public class CDPlayer {

    /**
     *private 成員變量
     */
    @Autowired
    private CompactDisc cd;

    @Autowired
    private Power power;

    public CDPlayer() {
        super();
        System.out.println("CDPlayer無參數(shù)構造函數(shù)");

    }

    /**
     * Ctrl + Insert 選(Constructor)創(chuàng)建有參的構造函數(shù)
     * @param
     */

//    @Autowired
//    public CDPlayer(CompactDisc cd) {
//        this.cd = cd;
//        System.out.println("CDPlayer有參數(shù)構造函數(shù)");
//    }

//    @Autowired
//    public CDPlayer(CompactDisc cd, Power power) {
//        this.cd = cd;
//        this.power = power;
//        System.out.println("CDPlayer多參數(shù)構造函數(shù)。。。。");
//    }

    /**
     * 定義一個方法play,執(zhí)行cd.play()播放工作
     */
    public void play(){
        power.supply();
        cd.play();
    }
}
3.2.3 利用setter方法進行依賴注入

Alt+Insert 選setter進行setter對對象方法進行裝配

package soundsystem;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Component 讓他能被spring上下文發(fā)現(xiàn)
 */

@Component
public class CDPlayer {

    /**
     *private 成員變量
     */
    //@Autowired
    private CompactDisc cd;

    //@Autowired
    private Power power;

    @Autowired
    public void setCd(CompactDisc cd) {
        this.cd = cd;
        System.out.println("調用setCd。。。。");
    }

    @Autowired
    public void setPower(Power power) {
        this.power = power;
        System.out.println("調用setPower。。。");
    }

    public CDPlayer() {
        super();
        System.out.println("CDPlayer無參數(shù)構造函數(shù)");

    }

    /**
     * Ctrl + Insert 選(Constructor)創(chuàng)建有參的構造函數(shù)
     * @param
     */

//    @Autowired
//    public CDPlayer(CompactDisc cd) {
//        this.cd = cd;
//        System.out.println("CDPlayer有參數(shù)構造函數(shù)");
//    }

//    @Autowired
//    public CDPlayer(CompactDisc cd, Power power) {
//        this.cd = cd;
//        this.power = power;
//        System.out.println("CDPlayer多參數(shù)構造函數(shù)。。。。");
//    }

    /**
     * 定義一個方法play,執(zhí)行cd.play()播放工作
     */
    public void play(){
        power.supply();
        cd.play();

    }

}
3.2.4 用在任意方法上
package soundsystem;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Component 讓他能被spring上下文發(fā)現(xiàn)
 */

@Component
public class CDPlayer {

    /**
     *private 成員變量
     */
    //@Autowired
    private CompactDisc cd;

    //@Autowired
    private Power power;

//    @Autowired
//    public void setCd(CompactDisc cd) {
//        this.cd = cd;
//        System.out.println("調用setCd。。。。");
//    }
//
//    @Autowired
//    public void setPower(Power power) {
//        this.power = power;
//        System.out.println("調用setPower。。。");
//    }
    @Autowired
    public void prepare(CompactDisc cd ,Power power){
        this.cd = cd;
        this.power = power;
        System.out.println("調用prepare。。。");

    }

    public CDPlayer() {
        super();
        System.out.println("CDPlayer無參數(shù)構造函數(shù)");

    }

    /**
     * Ctrl + Insert 選(Constructor)創(chuàng)建有參的構造函數(shù)
     * @param
     */

//    @Autowired
//    public CDPlayer(CompactDisc cd) {
//        this.cd = cd;
//        System.out.println("CDPlayer有參數(shù)構造函數(shù)");
//    }

//    @Autowired
//    public CDPlayer(CompactDisc cd, Power power) {
//        this.cd = cd;
//        this.power = power;
//        System.out.println("CDPlayer多參數(shù)構造函數(shù)。。。。");
//    }

    /**
     * 定義一個方法play,執(zhí)行cd.play()播放工作
     */
    public void play(){
        power.supply();
        cd.play();

    }

}
4.接口開發(fā) interface 4.1 簡單的接口實現(xiàn),單一實現(xiàn)類環(huán)境

創(chuàng)建com.cloud.demo.service 包

創(chuàng)建UserService 接口

package com.cloud.demo.service;


/**

*/
public interface UserService {

  void add();

}

- 創(chuàng)建接口實現(xiàn)方法(實現(xiàn)類),創(chuàng)建包com.cloud.demo.service.com.cloud.demo.service.impl,創(chuàng)建實現(xiàn)類UserServiceNormal

package com.cloud.demo.service.com.cloud.demo.service.impl;

import com.cloud.demo.service.UserService;
import org.springframework.stereotype.Component;

/**

UserServiceNormal 實現(xiàn)UserService 的方法

這里為實現(xiàn)類,@Component不寫在接口,寫在實現(xiàn)類上

*/

@Component
public class UserServiceNormal implements UserService {

  public void add() {
      System.out.println("添加用戶");

  }

}

- 創(chuàng)建配置類AppConfig

package com.cloud.demo.service;

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

@Configuration
@ComponentScan
public class AppConfig {

}



- 創(chuàng)建單元測試,新建包com.cloud.demo.service,userService的接口UserServiceTest

package com.cloud.demo.service;

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;

/**

1.要測試的是userService的接口

2.private UserService userService; 接口注入@Autowired

3.userService.add() 調用add()方法

*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class UserServiceTest {

  //單一實現(xiàn)類環(huán)境下
  @Autowired
  private UserService userService;

  @Test
  public void testAdd(){
      userService.add();
  }

}

***@Component不寫在接口,寫在實現(xiàn)類上***

***調用userService,需要聲明接口 private UserService userService;***

### 4.2 多實現(xiàn)類環(huán)境

#### 4.2.1 設置首選Bean

- 配置@Primary,這樣系統(tǒng)默認就會使用UserServiceNormal實現(xiàn)類,但是有局限性
- 只能定義一個@Primary

@Component
@Primary
public class UserServiceNormal implements UserService {

public void add() {
    System.out.println("增加用戶");
}

public void del() {
    System.out.println("刪除用戶");
}

}

#### 4.2.2 使用限定符@Qualifier

UserServiceFestival

@Component
@Qualifier("Festival")
public class UserServiceFestival implements UserService {

@Override
public void add() {
    System.out.println("注冊用戶并發(fā)送優(yōu)惠券");
}

@Override
public void del() {

}

}

UserServiceNormal

@Component
@Qualifier("Normal")
public class UserServiceNormal implements UserService {

public void add() {
    System.out.println("增加用戶");
}

public void del() {
    System.out.println("刪除用戶");
}

}

UserServiceTest

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class UserServiceTest {

@Autowired
//這里通過@Qualifier 調用Festival 實現(xiàn)類
@Qualifier("Festival")
private UserService userService;

@Test
public void testAdd(){
    userService.add();
    userService.del();
}

}

#### 4.2.3 通過設置ID和限定符實現(xiàn)

- 將參數(shù)配置在@Component中實現(xiàn)@Qualifier

UserServiceFestival

@Component("fastival")
public class UserServiceFestival implements UserService {

@Override
public void add() {
    System.out.println("注冊用戶并發(fā)送優(yōu)惠券");
}

@Override
public void del() {

}

}

UserServiceNormal

@Component("normal")
public class UserServiceNormal implements UserService {

public void add() {
    System.out.println("增加用戶");
}

public void del() {
    System.out.println("刪除用戶");
}

}

UserServiceTest

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class UserServiceTest {

@Autowired
@Qualifier("fastival")
private UserService userService;

@Test
public void testAdd(){
    userService.add();
    userService.del();
}

}

#### 4.2.4 使用系統(tǒng)默認ID和限定符

- spring中默認會給實現(xiàn)類分配一個ID ,為類名首寫字母小寫

UserServiceTest

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class UserServiceTest {

@Autowired
@Qualifier("userServiceNormal")
private UserService userService;

@Test
public void testAdd(){
    userService.add();
    userService.del();
}

}

#### 4.2.5 使用@Resource

- @Resource 相當于@Autowired + @Qualifier("userServiceNormal")
- @Resource是jdk標準類,非spring標準類

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class UserServiceTest {

//@Autowired
//@Qualifier("userServiceNormal")
@Resource(name="userServiceNormal")
private UserService userService;


@Test
public void testAdd(){
    userService.add();
    userService.del();
}

}

## 5.配置類 ComponentScan組件掃描

### 5.1 直接聲明

直接聲明單個目錄

@Configuration
@ComponentScan("com.cloud.demo")



直接聲明多個目錄

@Configuration
@ComponentScan(basePackages = {"com.cloud.demo.web","com.cloud.demo.service","com.cloud.demo.dao"})

- 有風險重構不會自動修改



直接聲明接口類

@Configuration
@ComponentScan(basePackageClasses = {UserController.class, UserService.class, UserDao.class})

### 5.2 XML聲明

***applicationContext.xml 相當于@Configuration***

applicationContext.xml


   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">

    

***測試用列中修改UserControllerTest***

@ContextConfiguration("classpath:applicationContext.xml") 指定xml位置

@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(classes = AppConfig.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class UserControllerTest {

@Autowired
private UserController userController;

@Test
public void testAdd(){
    userController.add();

}

}

## 6 配置Java Configuration

### 6.1 如何配置@bean對象在java Config

接口:UserDao

public interface UserDao {

void add();

}

接口實現(xiàn)類:UserDaoNormal

public class UserDaoNormal implements UserDao {

@Override
public void add() {

    System.out.println("添加用戶到數(shù)據(jù)庫中。。。。");

}

}

配置類:AppConfig

- @Configuration 聲明為配置類
- @Bean標識spring默認啟動會自動加載改配置

@Configuration
public class AppConfig {

@Bean
public UserDao UserDaoNormal(){
    System.out.println("創(chuàng)建UserDao對象");

    return new UserDaoNormal();
}

}

測試類:UserDaoTest

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class UserDaoTest {

@Autowired
private UserDao userDao;

@Test
public void testAdd(){

    userDao.add();
}

}

### 6.2 構造函數(shù)注入場景- 普通方式

UserServiceNormal 

- 通過構造函數(shù)關聯(lián)依賴

public class UserServiceNormal implements UserService {

private UserDao userDao;

//無參構造函數(shù)
public UserServiceNormal() {
    super();
}

//有參構造函數(shù)
public UserServiceNormal(UserDao userDao) {
    this.userDao = userDao;
}

@Override
public void add() {
    userDao.add();

}

}

UserService

public interface UserService {

void add();

}

UserDao

public interface UserDao {

void add();

}

UserDaoNormal

public class UserDaoNormal implements UserDao {

@Override
public void add() {

    System.out.println("添加用戶到數(shù)據(jù)庫中。。。。");

}

}

AppConfig

@Configuration
public class AppConfig {

@Bean
public UserDao userDaoNormal(){
    System.out.println("創(chuàng)建UserDao對象");

    return new UserDaoNormal();
}

@Bean
public UserService userServiceNormal(){
    System.out.println("創(chuàng)建UserService對象");
    UserDao userDao = userDaoNormal();
    return new UserServiceNormal(userDao);
}

}

UserServiceTest

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class UserServiceTest {

@Autowired
private UserService userService;

@Test
public void testAdd(){

    userService.add();
}

}

### 6.3 構造函數(shù)注入場景- 優(yōu)雅方式

AppConfig

@Configuration
public class AppConfig {

@Bean
public UserDao userDaoNormal(){
    System.out.println("創(chuàng)建UserDao對象");

    return new UserDaoNormal();
}

@Bean
public UserService userServiceNormal(UserDao userDao){
    System.out.println("創(chuàng)建UserService對象");
    
    //UserDao userDao = userDaoNormal();
    return new UserServiceNormal(userDao);
}

}

- 實際編程中不會做函數(shù)的調用,而是在參數(shù)中取獲取UserDao

### 6.4 通過setter方法依賴注入

UserServiceNormal

public class UserServiceNormal implements UserService {

private UserDao userDao;

//setter方法注入
public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
}

@Override
public void add() {
    userDao.add();

}

}

AppConfig

@Configuration
public class AppConfig {

@Bean
public UserDao userDaoNormal(){
    System.out.println("創(chuàng)建UserDao對象");

    return new UserDaoNormal();
}

@Bean
public UserService userServiceNormal(UserDao userDao){
    System.out.println("創(chuàng)建UserService對象");
    //賦值給一個變量userService
    UserServiceNormal userService = new UserServiceNormal();
    //調用userService的setter方法,將userDao注入
    userService.setUserDao(userDao);
    //返回userService
    return userService;

}

}

### 6.5 通過任意函數(shù)注入

UserServiceNormal

public class UserServiceNormal implements UserService {

private UserDao userDao;

//任意函數(shù)注入
public void prepare(UserDao userDao){
    this.userDao = userDao;
}

@Override
public void add() {
    userDao.add();

}

}

AppConfig

@Configuration
public class AppConfig {

@Bean
public UserDao userDaoNormal(){
    System.out.println("創(chuàng)建UserDao對象");

    return new UserDaoNormal();
}

@Bean
public UserService userServiceNormal(UserDao userDao){
    System.out.println("創(chuàng)建UserService對象");
    UserServiceNormal userService = new UserServiceNormal();
    //任意函數(shù)注入
    userService.prepare(userDao);
    return userService;

}

}

### 6.6 XML裝配

#### 6.6.1 創(chuàng)建xml配置規(guī)范

applicationContext.xml


   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">

#### 6.6.2 xml定義第bean

CompactDisc

public class CompactDisc {

public CompactDisc() {
    super();
    System.out.println("CompacDisc構造函數(shù)。。。。" + this.toString());
}

public void play(){
    System.out.println("播放CD音樂。。。。。" + this.toString());

}

}

ApplicationSpring

public class ApplicationSpring {

public static void main(String[] args) {
    System.out.println("ApplicationSpring is running......");

    ClassPathXmlApplicationContext context =  new ClassPathXmlApplicationContext("applicationContext.xml");
    //初始化cd
    CompactDisc cd = context.getBean(CompactDisc.class);
    //調用play方法
    cd.play();
}

}

applicationContext.xml

- xml 定義bean


   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">

輸出結果

ApplicationSpring is running......
CompacDisc構造函數(shù)。。。。com.cloud.deam.soundsystem.CompactDisc@2669b199
播放CD音樂。。。。。com.cloud.deam.soundsystem.CompactDisc@2669b199



***多個重名bean設置id區(qū)分:***


- name可以通過分號、空格、逗號分隔,設置不同的別名 name="CompactDisc1 CompactDisc12 CompactDisc13  "
- id只能通過傳字符進行傳遞

ApplicationSpring -- 主方法

public class ApplicationSpring {

public static void main(String[] args) {
    System.out.println("ApplicationSpring is running......");

    ClassPathXmlApplicationContext context =  new ClassPathXmlApplicationContext("applicationContext.xml");
    //CompactDisc cd = context.getBean(CompactDisc.class);

    CompactDisc cd1 = (CompactDisc) context.getBean("compactDisc1");
    CompactDisc cd2 = (CompactDisc) context.getBean("compactDisc2");
    
    cd1.play();      
    cd2.play();
}

}

AppTest -- 測試類

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class CompactDiscTest {

@Autowired
private CompactDisc CompactDisc1;

@Autowired
private CompactDisc CompactDisc2;

//過濾方式注入
@Autowired
@Qualifier("CompactDisc2")
private CompactDisc cd;


@Test
public void testPlay(){
    CompactDisc1.play();
    CompactDisc2.play();
    cd.play();
}

}

#### 6.6.3 xml注入 - 通過構造函數(shù)

| 名稱                  | 用途                                                         | 備注 |
| --------------------- | ------------------------------------------------------------ | ---- |
| 元素 | 依賴Bean,有參構造函數(shù)依賴注入                               |      |
| c-名稱空間            | --c:c函數(shù)命令空間 :cd 構造函數(shù)的參數(shù)名字cd
public CDPlayer(CompactDisc cd),-ref:表示的是CompactDisc2名稱的引用
也可以寫成c:0-ref="CompactDisc2" c:1-ref="CompactDisc2" 表示第一個 第二個參數(shù) | | | | | | ***元構造函數(shù)依賴注入*** applicationContext.xml

    
            
CDPlayerTest

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class CDPlayerTest {

@Autowired
private CDPlayer cdPlayer;

@Test
public void Test01(){

    cdPlayer.play();
}

}

***c-名稱空間依賴注入***


   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.xsd">




    



CDPlayerTest

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class CDPlayerTest {

@Autowired
private CDPlayer cdPlayer1;

@Autowired
private CDPlayer cdPlayer2;

@Test
public void Test01(){

    cdPlayer1.play();
    cdPlayer2.play();
}

}

#### 6.6.4 注入簡單類型 -通過構造函數(shù)

- 給CompactDisc1 對象注入title、artist

    
    

    
    
***-c方式注入簡單類型:***
CompactDisc

public class CompactDisc {

private String title;
private String artist;


public CompactDisc() {
    super();
    System.out.println("CompacDisc構造函數(shù)。。。。" + this.toString());
}



public CompactDisc(String title, String artist) {
    this.title = title;
    this.artist = artist;

    System.out.println("CompacDisc構造函數(shù)。。。。" + this.toString());
}

public void play(){
    System.out.println("播放CD音樂。。。。。" + this.toString() +" " +this.title+ " by " +this.artist);

}

}

#### 6.6.5  注入list類型 -通過構造函數(shù)

applicationContext.xml

    
    
    
        
            I Do 1
            I Do 2
            I Do 3
        
    
CompactDisc

public class CompactDisc {

private String title;
private String artist;

//聲明一個list
private List tracks;


public CompactDisc() {
    super();
    System.out.println("CompacDisc構造函數(shù)。。。。" + this.toString());
}



public CompactDisc(String title, String artist) {
    this.title = title;
    this.artist = artist;

    System.out.println("CompacDisc有參構造函數(shù)。。。。" + this.toString());
}

//創(chuàng)建包含三個函數(shù)的構造函數(shù)
public CompactDisc(String title, String artist, List tracks) {
    this.title = title;
    this.artist = artist;
    this.tracks = tracks;

    System.out.println("CompacDisc有三個參構造函數(shù)。。。。" + this.toString());
}

public void play(){
    System.out.println("播放CD音樂。。。。。" + this.toString() +" " +this.title+ " by " +this.artist);
    
   //循環(huán)打印tracks內容
    for (String track : this.tracks) {
        System.out.println("音樂:" + track);
    }

}

}

***創(chuàng)建一個復雜對象類型***

創(chuàng)建類型 Music 

package com.cloud.deam.soundsystem;

public class Music {

private String title;
private Integer duration;

//創(chuàng)建getter setter 方法
public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public Integer getDuration() {
    return duration;
}

public void setDuration(Integer duration) {
    this.duration = duration;
}

//創(chuàng)建無參構造方法

public Music() {
    super();
}

//創(chuàng)建有參構造方法
public Music(String title, Integer duration) {
    this.title = title;
    this.duration = duration;
}

}

CompactDisc

public class CompactDisc {

private String title;
private String artist;

//設置List為Music類型
private List tracks;


public CompactDisc() {
    super();
    System.out.println("CompacDisc構造函數(shù)。。。。" + this.toString());
}



public CompactDisc(String title, String artist) {
    this.title = title;
    this.artist = artist;

    System.out.println("CompacDisc有參構造函數(shù)。。。。" + this.toString());
}

//設置List為Music類型
public CompactDisc(String title, String artist, List tracks) {
    this.title = title;
    this.artist = artist;
    this.tracks = tracks;

    System.out.println("CompacDisc有三個參構造函數(shù)。。。。" + this.toString());
}

public void play(){
    System.out.println("播放CD音樂。。。。。" + this.toString() +" " +this.title+ " by " +this.artist);

    for (Music track : this.tracks) {
        //通過get方法獲取屬性
        System.out.println("音樂:" + track.getTitle() + ".時長:" + track.getDuration());

    }

}

}

applicationContext.xml

- 復雜的對象依賴注入

    
    



    
    



    
    



    
    
    
        
            
            
            
        
    
#### 6.6.6 注入set類型 -通過構造函數(shù)

CompactDisc

public class CompactDisc {

private String title;
private String artist;

//設置set為Music類型
private List tracks;


public CompactDisc() {
    super();
    System.out.println("CompacDisc構造函數(shù)。。。。" + this.toString());
}



public CompactDisc(String title, String artist) {
    this.title = title;
    this.artist = artist;

    System.out.println("CompacDisc有參構造函數(shù)。。。。" + this.toString());
}

//設置set為Music類型
public CompactDisc(String title, String artist, set tracks) {
    this.title = title;
    this.artist = artist;
    this.tracks = tracks;

    System.out.println("CompacDisc有三個參構造函數(shù)。。。。" + this.toString());
}

public void play(){
    System.out.println("播放CD音樂。。。。。" + this.toString() +" " +this.title+ " by " +this.artist);

    for (Music track : this.tracks) {
        //通過get方法獲取屬性
        System.out.println("音樂:" + track.getTitle() + ".時長:" + track.getDuration());

    }

}

}

applicationContext.xml

    
    



    
    



    
    




    
    
    
        
        
            
            
            
        
    
- ***set和list區(qū)別在裝配的時候重復的值在set中會被過濾***
- ***set元素的順序能夠和插入一致。而list是無序的***



#### 6.6.7 注入MAP集合 -通過構造函數(shù)

CompactDisc

public class CompactDisc {

private String title;
private String artist;
private Map tracks;


public CompactDisc() {
    super();
    System.out.println("CompacDisc構造函數(shù)。。。。" + this.toString());
}

public CompactDisc(String title, String artist) {
    this.title = title;
    this.artist = artist;

    System.out.println("CompacDisc有參構造函數(shù)。。。。" + this.toString());
}

public CompactDisc(String title, String artist, Map tracks) {
    this.title = title;
    this.artist = artist;
    this.tracks = tracks;

    System.out.println("CompacDisc有三個參構造函數(shù)。。。。" + this.toString());
}

public void play(){
    System.out.println("播放CD音樂。。。。。" + this.toString() +" " +this.title+ " by " +this.artist);

    for (String key : this.tracks.keySet()) {
        System.out.println("key:" + key );
        Music music = this.tracks.get(key);
        System.out.println("音樂:" + music.getTitle() + ".時長:" + music.getDuration());
    }
}

}

applicationContext.xml

    
    



    
    



    
    




    
    
    
        
        //map類型注入需要使用entry
        
            
            
            
        
    
#### 6.6.8 注入數(shù)組類型 -通過構造函數(shù)

CompactDisc

public class CompactDisc {

private String title;
private String artist;
//設置Music為數(shù)組類型
private Music[] tracks;


public CompactDisc() {
    super();
    System.out.println("CompacDisc構造函數(shù)。。。。" + this.toString());
}



public CompactDisc(String title, String artist) {
    this.title = title;
    this.artist = artist;

    System.out.println("CompacDisc有參構造函數(shù)。。。。" + this.toString());
}

//設置Music為數(shù)組類型
public CompactDisc(String title, String artist, Music[] tracks) {
    this.title = title;
    this.artist = artist;
    this.tracks = tracks;

    System.out.println("CompacDisc有三個參構造函數(shù)。。。。" + this.toString());
}

public void play(){
    System.out.println("播放CD音樂。。。。。" + this.toString() +" " +this.title+ " by " +this.artist);

    for (Music track : this.tracks) {
        System.out.println("音樂:" + track.getTitle() + ".時長:" + track.getDuration());

    }

}

}

applicationContext.xml

    
    



    
    



    
    




    
    
    
        
            
            
            
        
    
#### 6.6.9 屬性注入

1.set注入屬性注入

applicationContext-properties.xml

- property 注入元素


   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">


    
    




   
   


Music

- 屬性注入只需set方法就可以
- 屬性的構造方法,會走無參構造函數(shù)

public class Music {

//聲明的是私有的成員變量
private String title;
private Integer duration;

//創(chuàng)建getter setter 方法
public String getTitle() {
    return title;
}

//setTitle是屬性
public void setTitle(String title) {
    this.title = title;
    System.out.println("--在" +this.toString() + "中注入title");
}

public Integer getDuration() {
    return duration;
}

//setDuration是屬性
public void setDuration(Integer duration) {
    this.duration = duration;
    System.out.println("--在" +this.toString() + "中注入duration");
}

//創(chuàng)建無參構造方法

public Music() {
    super();
    System.out.println("Music的構造函數(shù)。。。"+this.toString());
}

//創(chuàng)建有參構造方法
public Music(String title, Integer duration) {
    this.title = title;
    this.duration = duration;

}

}

AppTest

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-properties.xml")
public class AppTest {

@Test
public void test(){
}

}

測試結果

Music的構造函數(shù)。。。com.cloud.deam.soundsys

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/75700.html

相關文章

  • java&javaweb學習筆記(匯總)

    摘要:我的學習筆記匯總標簽筆記分為兩大部分和筆記內容主要是對一些基礎特性和編程細節(jié)進行總結整理,適合了解基礎語法,想進一步深入學習的人如果覺得不錯,請給,這也是對我的鼓勵,有什么意見歡迎留言反饋目錄基礎鞏固筆記反射基礎鞏固筆記泛型基礎鞏 我的java&javaweb學習筆記(匯總) 標簽: java [TOC] 筆記分為兩大部分:javase和javaweb javase javawe...

    yagami 評論0 收藏0
  • Java初學者最佳的學習方法以及會遇到的坑(內含學習資料)!

    摘要:最近系統(tǒng)整理了一套初學者最佳的學習方法以及會遇到的坑等,希望對你有所幫助。正常的智商其實,學習并不需要所謂的數(shù)學邏輯好,需要英語水平棒。大周期每天學習時間五個小時以上的,建議學習周期。三學習時會遇到的坑不知道學習的重點,下面學習路線會畫。 最近系統(tǒng)整理了一套java初學者最佳的學習方法以及會遇到的坑等,希望對你有所幫助。 目錄: 一、學習java的前提 二、學習java的方法 三、學習...

    Half 評論0 收藏0
  • Java入門請不要放棄,學習路線以及側重點分析

    摘要:而面向搜索引擎,就是我們要及時的使用百度谷歌遇到問題無法解決,先別急著放棄,可以去網絡尋找答案,你的坑大部分別人都已經走過了,大部分都可以找到合適的解決方案。 showImg(https://segmentfault.com/img/remote/1460000019236352?w=866&h=456); 前言: ●眾多的語言,到底哪一門才是適合我的?●我們?yōu)槭裁匆獙W習Java語言呢...

    mochixuan 評論0 收藏0
  • ApacheCN 編程/大數(shù)據(jù)/數(shù)據(jù)科學/人工智能學習資源 2019.6

    摘要:請回復這個帖子并注明組織個人信息來申請加入。權限分配靈活,能者居之。數(shù)量超過個,在所有組織中排名前。網站日超過,排名的峰值為。導航歸檔社區(qū)自媒體平臺微博知乎專欄公眾號博客園簡書合作侵權,請聯(lián)系請抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=...

    Bmob 評論0 收藏0
  • ApacheCN 編程/大數(shù)據(jù)/數(shù)據(jù)科學/人工智能學習資源 2019.5

    摘要:請回復這個帖子并注明組織個人信息來申請加入。版筆記等到中文字幕翻譯完畢后再整理。數(shù)量超過個,在所有組織中排名前。網站日超過,排名的峰值為。主頁歸檔社區(qū)自媒體平臺微博知乎專欄公眾號博客園簡書合作侵權,請聯(lián)系請抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1...

    zhonghanwen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<