鍍金池/ 問(wèn)答/Java  網(wǎng)絡(luò)安全/ spring 屬性注入

spring 屬性注入

圖片描述

配置文件如上圖

CDPlayer 代碼:
package springdemo;

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

public class CDplayer {

private CD cdd;
@Autowired
public void setCdd(CD c){
    this.cdd=c;
}
public void play(){
    System.out.println(cdd);//跟蹤cdd輸出是null
        cdd.play();
}


}

測(cè)試代碼:
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import springdemo.CDplayer;

public class CDtest {

@Test
public void goCd(){
    ClassPathXmlApplicationContext ct = new ClassPathXmlApplicationContext("application.xml");
    CDplayer cp =(CDplayer) ct.getBean("cp");
    cp.play();
}

}
怎么一直報(bào)空指針異常搞不明白,

@Autowired
public void setCdd(CD c){
    this.cdd=c;
} 這個(gè)方法不是已經(jīng)把CD注入進(jìn)來(lái)了嗎? 按理說(shuō)下面調(diào)用cdd的時(shí)候不應(yīng)該為空啊,新手剛接觸  實(shí)在困惑

直接這樣寫(xiě):
public class CDplayer {

@Autowired
private CD cdd;


public void play(){
    System.out.println(cdd);//得到還是為空的
        cdd.play();
}

}
或者這樣:
圖片描述public class CDplayer {

private CD cdd;

public void play(){
    System.out.println(cdd);
        cdd.play();
}

}

為什么換成下面的代碼就可以了?配置文件xml是上面 cdd報(bào)紅色錯(cuò)誤的這個(gè)配置
public class CDplayer {

private CD cdd;

@Autowired
public void setCdd(CD c){
    this.cdd=c;
}
public void play(){
    System.out.println(cdd);
        cdd.play();
}

}

回答
編輯回答
綰青絲

p小寫(xiě)了。。。注意看黃色的警告提示。


題主更新了。
注入改成這個(gè)
@Autowired("cd")
private CD cdd;

2018年9月6日 04:39
編輯回答
尕筱澄

謝邀,因?yàn)槟愕淖⑷胧峭ㄟ^(guò)注解實(shí)現(xiàn)的,所以應(yīng)該在配置文件中顯示聲明<context:annotation-config />

2017年5月16日 12:36
編輯回答
貓小柒
@Component
public class CDplayer {

加上@Component再?lài)L試嘗試

2017年9月24日 13:39