亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

java學(xué)習(xí)筆記

fevin / 395人閱讀

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

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

功能模塊組成:

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

spring 包含spring MVC

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

接口:

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

接口可以比作協(xié)議,比如我說一個(gè)協(xié)議是“殺人”那么這個(gè)接口你可以用 砍刀去實(shí)現(xiàn),至于怎么殺砍刀可以去實(shí)現(xiàn),當(dāng)然你也可以用搶來實(shí)現(xiàn)殺人接口,但是你不能用殺人接口去殺人,因?yàn)闅⑷私涌谥徊贿^是個(gè)功能說明,是個(gè)協(xié)議,具體怎么干,還要看他的實(shí)現(xiàn)類。那么一個(gè)包里面如果有接口,你可以不實(shí)現(xiàn)。這個(gè)不影響你使用其他類。

1.3 for 循環(huán)

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

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

2.1 創(chuàng)建maven項(xiàng)目

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

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 關(guān)聯(lián)關(guān)系
     */
    private MessagesService service;

    /**
     * service setter 方法 選擇service 按住alt+insert 選擇setter
     * 設(shè)置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來調(diào)用MessagePrinter類
 */
public class Application {

    public static void main(String[] args) {

        System.out.println("application");

        //創(chuàng)建打印機(jī)對(duì)象
        MessagePrinter printer = new MessagePrinter();
        //創(chuàng)建消息服務(wù)對(duì)象
        MessagesService service = new MessagesService();
        //設(shè)置打印機(jī)的service屬性
        printer.setService(service);

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

    }
}

2.5 編寫spring 框架版本代碼

編寫MessagesService

package hello;

import org.springframework.stereotype.Component;

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

    /**
     * ctrl+o 創(chuàng)建無參構(gòu)造的方法(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容器,
 * 應(yīng)用程序的對(duì)象(MessagePrinter)未來會(huì)通過spring容器自動(dòng)創(chuàng)建出來
 * 不需要程序員通過new關(guān)鍵字來創(chuàng)建
 */
@Component
public class MessagePrinter {

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

    }

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

    /**
     * service setter 方法 選擇service 按住alt+insert 選擇setter
     * 設(shè)置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來調(diào)用MessagePrinter類
 * @ComponentScan 掃描@Component注解的類
 */
@ComponentScan
public class ApplicationSpring {

    public static void main(String[] args) {



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

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

    }
}

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

3.對(duì)象裝配注入Bean 3.1 Bena裝配(注入)的三種方式 3.1.1 隱式的bean發(fā)現(xiàn)機(jī)制和自動(dòng)裝配(主流)
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來調(diào)用MessagePrinter類
 * @ComponentScan 掃描@Component注解的類
 */
@ComponentScan
public class ApplicationSpring {

    public static void main(String[] args) {



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

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

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

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

        //設(shè)置打印機(jī)的service屬性,printer和service 建立關(guān)聯(lián)關(guān)系
        printer.setService(service);
        //打印消息調(diào)用printMessage打印
        printer.printMessage();
    }
}

從Context中獲取class

ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationSpring.class);

如何在對(duì)象中獲取對(duì)象

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

如何建立對(duì)象的關(guān)聯(lián)關(guān)系

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

1.定義CompactDisc類,

內(nèi)置CompactDisc無參構(gòu)造函數(shù)

paly方法

用@Component包裝

2.定義CDPlayer

內(nèi)置CDPlayer無參數(shù)構(gòu)造函數(shù)

聲明CompactDisc

構(gòu)建有參構(gòu)造函數(shù)關(guān)聯(lián)CDPlayer和CompactDisc,利用@Autowired進(jìn)行關(guān)聯(lián)自動(dòng)管理

定義play方法

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

先通過AnnotationConfigApplicationContext 查出類

執(zhí)行paly方法

利用@ComponentScan包裝,進(jìn)行自動(dòng)組件掃描

4.解耦組件掃描和主類

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

CompactDisc

package soundsystem;

import org.springframework.stereotype.Component;

@Component
public class CompactDisc {

    public CompactDisc() {
        super();
        System.out.println("CompactDisc無參構(gòu)造函數(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ù)構(gòu)造函數(shù)");
    }

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

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

    /**
     * 定義一個(gè)方法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;


/**
 * 這就是一個(gè)配置類
 */

@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進(jìn)行顯示

applicationContext.xml




    
    
    
        
        
    

MessagePrinter

package hello;

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

public class MessagePrinter {

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

    }

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

    /**
     * service setter 方法 選擇service 按住alt+insert 選擇setter
     * 設(shè)置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容器,
 * 應(yīng)用程序的對(duì)象(MessagesService)未來會(huì)通過spring容器自動(dòng)創(chuàng)建出來
 * 不需要程序員通過new關(guān)鍵字來創(chuàng)建
 */

public class MessagesService {

    /**
     * ctrl+o 創(chuàng)建無參構(gòu)造的方法(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來調(diào)用MessagePrinter類
 * @ComponentScan 掃描@Component注解的類
 */

public class ApplicationSpring {

    public static void main(String[] args) {

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

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

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

聲明使用xml文件

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

3.1.3 在java中進(jìn)行顯示 3.2 Autowired 使用場(chǎng)景

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

3.2.1 簡單的依賴注入例子

MessagePrinter

package hello;

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

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

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

    }

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

    /**
     * service setter 方法 選擇service 按住alt+insert 選擇setter
     * 設(shè)置service的值
     * @param service
     * @Autowired 用于spring管理對(duì)象之間的關(guān)聯(lián)關(guā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來調(diào)用MessagePrinter類
 * @ComponentScan 掃描@Component注解的類
 */
@ComponentScan
public class ApplicationSpring {

    public static void main(String[] args) {



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

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

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

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

        //設(shè)置打印機(jī)的service屬性,printer和service 建立關(guān)聯(lián)關(guān)系
        //printer.setService(service);
        //打印消息調(diào)用printMessage打印
        printer.printMessage();
    }
}

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

3.2.2 構(gòu)造函數(shù)方法進(jìn)行依賴注入

注入的效率最高

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ù)構(gòu)造函數(shù)");
    }

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

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

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

    /**
     * 定義一個(gè)方法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無參構(gòu)造函數(shù)");
    }

    public void play(){

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

AppConfig 無修改

package soundsystem;


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


/**
 * 這就是一個(gè)配置類
 */

@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 用成員變量的方式進(jìn)行依賴注入

這個(gè)方式就是spring通過反射機(jī)制做的依賴注入

注入效率低,但是簡潔

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ù)構(gòu)造函數(shù)");

    }

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

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

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

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

Alt+Insert 選setter進(jìn)行setter對(duì)對(duì)象方法進(jìn)行裝配

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("調(diào)用setCd。。。。");
    }

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

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

    }

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

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

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

    /**
     * 定義一個(gè)方法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("調(diào)用setCd。。。。");
//    }
//
//    @Autowired
//    public void setPower(Power power) {
//        this.power = power;
//        System.out.println("調(diào)用setPower。。。");
//    }
    @Autowired
    public void prepare(CompactDisc cd ,Power power){
        this.cd = cd;
        this.power = power;
        System.out.println("調(diào)用prepare。。。");

    }

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

    }

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

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

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

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

    }

}
4.接口開發(fā) interface 4.1 簡單的接口實(shí)現(xiàn),單一實(shí)現(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)建接口實(shí)現(xiàn)方法(實(shí)現(xiàn)類),創(chuàng)建包c(diǎn)om.cloud.demo.service.com.cloud.demo.service.impl,創(chuàng)建實(shí)現(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 實(shí)現(xiàn)UserService 的方法

這里為實(shí)現(xiàn)類,@Component不寫在接口,寫在實(shí)現(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)建單元測(cè)試,新建包c(diǎn)om.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.要測(cè)試的是userService的接口

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

3.userService.add() 調(diào)用add()方法

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

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

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

}

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

***調(diào)用userService,需要聲明接口 private UserService userService;***

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

#### 4.2.1 設(shè)置首選Bean

- 配置@Primary,這樣系統(tǒng)默認(rèn)就會(huì)使用UserServiceNormal實(shí)現(xiàn)類,但是有局限性
- 只能定義一個(gè)@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("注冊(cè)用戶并發(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 調(diào)用Festival 實(shí)現(xiàn)類
@Qualifier("Festival")
private UserService userService;

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

}

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

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

UserServiceFestival

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

@Override
public void add() {
    System.out.println("注冊(cè)用戶并發(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)默認(rèn)ID和限定符

- spring中默認(rèn)會(huì)給實(shí)現(xiàn)類分配一個(gè)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 相當(dāng)于@Autowired + @Qualifier("userServiceNormal")
- @Resource是jdk標(biāo)準(zhǔn)類,非spring標(biāo)準(zhǔn)類

@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 直接聲明

直接聲明單個(gè)目錄

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



直接聲明多個(gè)目錄

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

- 有風(fēng)險(xiǎn)重構(gòu)不會(huì)自動(dòng)修改



直接聲明接口類

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

### 5.2 XML聲明

***applicationContext.xml 相當(dāng)于@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">

    

***測(cè)試用列中修改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對(duì)象在java Config

接口:UserDao

public interface UserDao {

void add();

}

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

public class UserDaoNormal implements UserDao {

@Override
public void add() {

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

}

}

配置類:AppConfig

- @Configuration 聲明為配置類
- @Bean標(biāo)識(shí)spring默認(rèn)啟動(dòng)會(huì)自動(dòng)加載改配置

@Configuration
public class AppConfig {

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

    return new UserDaoNormal();
}

}

測(cè)試類:UserDaoTest

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

@Autowired
private UserDao userDao;

@Test
public void testAdd(){

    userDao.add();
}

}

### 6.2 構(gòu)造函數(shù)注入場(chǎng)景- 普通方式

UserServiceNormal 

- 通過構(gòu)造函數(shù)關(guān)聯(lián)依賴

public class UserServiceNormal implements UserService {

private UserDao userDao;

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

//有參構(gòu)造函數(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對(duì)象");

    return new UserDaoNormal();
}

@Bean
public UserService userServiceNormal(){
    System.out.println("創(chuàng)建UserService對(duì)象");
    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 構(gòu)造函數(shù)注入場(chǎng)景- 優(yōu)雅方式

AppConfig

@Configuration
public class AppConfig {

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

    return new UserDaoNormal();
}

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

}

- 實(shí)際編程中不會(huì)做函數(shù)的調(diào)用,而是在參數(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對(duì)象");

    return new UserDaoNormal();
}

@Bean
public UserService userServiceNormal(UserDao userDao){
    System.out.println("創(chuàng)建UserService對(duì)象");
    //賦值給一個(gè)變量userService
    UserServiceNormal userService = new UserServiceNormal();
    //調(diào)用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對(duì)象");

    return new UserDaoNormal();
}

@Bean
public UserService userServiceNormal(UserDao userDao){
    System.out.println("創(chuàng)建UserService對(duì)象");
    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構(gòu)造函數(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);
    //調(diào)用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">

輸出結(jié)果

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



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


- name可以通過分號(hào)、空格、逗號(hào)分隔,設(shè)置不同的別名 name="CompactDisc1 CompactDisc12 CompactDisc13  "
- id只能通過傳字符進(jìn)行傳遞

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 -- 測(cè)試類

@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注入 - 通過構(gòu)造函數(shù)

| 名稱                  | 用途                                                         | 備注 |
| --------------------- | ------------------------------------------------------------ | ---- |
| 元素 | 依賴Bean,有參構(gòu)造函數(shù)依賴注入                               |      |
| c-名稱空間            | --c:c函數(shù)命令空間 :cd 構(gòu)造函數(shù)的參數(shù)名字cd
public CDPlayer(CompactDisc cd),-ref:表示的是CompactDisc2名稱的引用
也可以寫成c:0-ref="CompactDisc2" c:1-ref="CompactDisc2" 表示第一個(gè) 第二個(gè)參數(shù) | | | | | | ***元構(gòu)造函數(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 注入簡單類型 -通過構(gòu)造函數(shù)

- 給CompactDisc1 對(duì)象注入title、artist

    
    

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

public class CompactDisc {

private String title;
private String artist;


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



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

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

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

}

}

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

applicationContext.xml

    
    
    
        
            I Do 1
            I Do 2
            I Do 3
        
    
CompactDisc

public class CompactDisc {

private String title;
private String artist;

//聲明一個(gè)list
private List tracks;


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



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

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

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

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

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

}

}

***創(chuàng)建一個(gè)復(fù)雜對(duì)象類型***

創(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)建無參構(gòu)造方法

public Music() {
    super();
}

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

}

CompactDisc

public class CompactDisc {

private String title;
private String artist;

//設(shè)置List為Music類型
private List tracks;


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



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

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

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

    System.out.println("CompacDisc有三個(gè)參構(gòu)造函數(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() + ".時(shí)長:" + track.getDuration());

    }

}

}

applicationContext.xml

- 復(fù)雜的對(duì)象依賴注入

    
    



    
    



    
    



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

CompactDisc

public class CompactDisc {

private String title;
private String artist;

//設(shè)置set為Music類型
private List tracks;


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



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

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

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

    System.out.println("CompacDisc有三個(gè)參構(gòu)造函數(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() + ".時(shí)長:" + track.getDuration());

    }

}

}

applicationContext.xml

    
    



    
    



    
    




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



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

CompactDisc

public class CompactDisc {

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


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

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

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

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

    System.out.println("CompacDisc有三個(gè)參構(gòu)造函數(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() + ".時(shí)長:" + music.getDuration());
    }
}

}

applicationContext.xml

    
    



    
    



    
    




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

CompactDisc

public class CompactDisc {

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


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



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

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

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

    System.out.println("CompacDisc有三個(gè)參構(gòu)造函數(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() + ".時(shí)長:" + 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方法就可以
- 屬性的構(gòu)造方法,會(huì)走無參構(gòu)造函數(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)建無參構(gòu)造方法

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

//創(chuàng)建有參構(gòu)造方法
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(){
}

}

測(cè)試結(jié)果

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/75700.html

相關(guān)文章

  • java&javaweb學(xué)習(xí)筆記(匯總)

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

    yagami 評(píng)論0 收藏0
  • Java初學(xué)者最佳的學(xué)習(xí)方法以及會(huì)遇到的坑(內(nèi)含學(xué)習(xí)資料)!

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

    Half 評(píng)論0 收藏0
  • Java入門請(qǐng)不要放棄,學(xué)習(xí)路線以及側(cè)重點(diǎn)分析

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

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

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

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

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

    zhonghanwen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<