前幾日做項(xiàng)目贵试,發(fā)現(xiàn)@Value和@Autowired一直無(wú)法注入值,今天整理一下這個(gè)問題
@Autowired和new的區(qū)別
@Autowired相當(dāng)于setter体捏,在注入之前呆馁,對(duì)象已經(jīng)實(shí)例化,是在這個(gè)接口注解的時(shí)候?qū)嵗娜的欢鴑ew只是實(shí)例化一個(gè)對(duì)象主到,而且new的對(duì)象不能調(diào)用注入的其他類
public class Test {
@Autowired
private HdFsService hdFsService; // 相當(dāng)于setter,已經(jīng)實(shí)例化
}
@Autowired的注意事項(xiàng)
@Autowired注入Spring Bean躯概,即當(dāng)前類必須也是Spring Bean才能調(diào)用它登钥,不能用new xxx()來(lái)獲得對(duì)象,這種方式獲得的對(duì)象無(wú)法調(diào)用@Autowired注入的Bean娶靡,即調(diào)用@Autowired的類上需要添加@Component牧牢,@Service,@Repository或@Controller等。
super和this的用法
只有子類重寫了父類的方法時(shí)塔鳍,如果需要用到父類的方法時(shí)伯铣,才要用super,表明這個(gè)方法是父類的方法不是子類的方法轮纫。
public class Father {
public String str = "父類變量";
public String strOnly = "父類變量腔寡,子類沒有同名變量";
public void printf(String str) {
System.out.println(str + "這是父類的方法");
}
public void printfOnly(String str) {
System.out.println("這是父類的方法,子類沒有重寫的方法====>" + str);
}
}
public class Son extends Father{
public String str = "子類變量";
public void printf(String str){
System.out.println(str+"這是子類的方法");
}
public void test() {
printf("什么都不使用=======>");
this.printf("使用this=======>");
super.printf("使用super=======>");
printfOnly("子類沒重寫,就會(huì)調(diào)用父類的方法");
System.out.println("str is ===========>"+str);
System.out.println("super.str is ===========>"+super.str);
System.out.println("子類沒有同名變量掌唾,就會(huì)去找父類的變量===========>"+strOnly);
}
public static void main(String[] args) {
Son son = new Son();
son.test();
}
}
子類重寫printf方法放前,如果需要調(diào)用父類的方法就要加super,否則糯彬,默認(rèn)調(diào)用子類的方法凭语。對(duì)于變量也是一樣。
子類的構(gòu)造函數(shù)中不是必須使用super情连,在構(gòu)造函數(shù)中,如果第一行沒有寫super(),編譯器會(huì)自動(dòng)插入.但是如果父類沒有不帶參數(shù)的構(gòu)造函數(shù),或這個(gè)函數(shù)被私有化了(用private修飾).此時(shí)你必須加入對(duì)父類的實(shí)例化構(gòu)造.而this就沒有這個(gè)要求,因?yàn)樗旧砭瓦M(jìn)行實(shí)例化的構(gòu)造.
如果父類的構(gòu)造函數(shù)是無(wú)參的叽粹,那子類構(gòu)造函數(shù)會(huì)在第一行默認(rèn)調(diào)用super().
java中equals和==的區(qū)別
1.基本數(shù)據(jù)類型,也稱原始數(shù)據(jù)類型却舀。byte,short,char,int,long,float,double,boolean
他們之間的比較虫几,應(yīng)用雙等號(hào)(==),比較的是他們的值。
2.復(fù)合數(shù)據(jù)類型(類)
當(dāng)他們用(==)進(jìn)行比較的時(shí)候挽拔,比較的是他們?cè)趦?nèi)存中的存放地址辆脸,所以,除非是同一個(gè)new出來(lái)的對(duì)象螃诅,他們的比較后的結(jié)果為true啡氢,否則比較后結(jié)果為false。 JAVA當(dāng)中所有的類都是繼承于Object這個(gè)基類的术裸,在Object中的基類中定義了一個(gè)equals的方法倘是,這個(gè)方法的初始行為是比較對(duì)象的內(nèi)存地 址,但在一些類庫(kù)當(dāng)中這個(gè)方法被覆蓋掉了袭艺,如String,Integer,Date在這些類當(dāng)中equals有其自身的實(shí)現(xiàn)搀崭,而不再是比較類在堆內(nèi)存中的存放地址了。
對(duì)于復(fù)合數(shù)據(jù)類型之間進(jìn)行equals比較猾编,在沒有覆寫equals方法的情況下瘤睹,他們之間的比較還是基于他們?cè)趦?nèi)存中的存放位置的地址值的,因?yàn)镺bject的equals方法也是用雙等號(hào)(==)進(jìn)行比較的答倡,所以比較后的結(jié)果跟雙等號(hào)(==)的結(jié)果相同轰传。