?? 大家好,我是執(zhí)梗。本專欄將從Spring
入門開始講起,詳細(xì)講解各類配置的使用以及原因,到使用SpringBoot
進(jìn)行開發(fā)實(shí)戰(zhàn),旨在記錄學(xué)習(xí)生活的同時(shí)也希望能幫到大家,如果對(duì)您能有所幫助,還望能點(diǎn)贊關(guān)注該專欄,對(duì)于專欄內(nèi)容有錯(cuò)還望您可以及時(shí)指點(diǎn),非常感謝大家 🌹。
??我們上文以及講過Spring
的IOC容器,那么這個(gè)容器管理的對(duì)象,我們一般就成為Bean
對(duì)象。我們以前平時(shí)生成一個(gè)對(duì)象,都是調(diào)用構(gòu)造方法來new
對(duì)象,對(duì)象都是由我們自己進(jìn)行管理和生成,當(dāng)我們將User
對(duì)象托管給Spring
管理后,此時(shí)的User
就可以稱之為是一個(gè)Bean
對(duì)象,Spring
可以幫我們?nèi)ス芾砗蜕蓪?duì)象,不需要我們自己去操作。
??當(dāng)然并不是所有的對(duì)象Spring
都得去幫我們管理,我們需要手動(dòng)的去告訴它,這就是我們本文要講的Bean
的注入方式。
??這是Spring
版本比較老的注入方式,當(dāng)然現(xiàn)在大家都不怎么使用了,主要還是因?yàn)椴环奖?,而?code>XML配置文件在SpringBoot
中已經(jīng)不使用了 。
??在Spring
的XML
文件中,我們首先使用Bean
標(biāo)簽注入我們需要注入的類,然后通過property
標(biāo)簽的value
屬性完成賦值操作。它是基于注入類的set
方法進(jìn)行賦值的,如果property
選擇的屬性沒有set
方法則會(huì)報(bào)錯(cuò)。
實(shí)體類代碼:
@Data //自動(dòng)注入所有g(shù)et set方法,基于lombok
public class Student {String name;
String id;
}
XML
文件:
主函數(shù)運(yùn)行:
public class App {public static void main(String[] args) {//1.得到spring上下文對(duì)象
ApplicationContext context=
new ClassPathXmlApplicationContext("application.xml");
//2.根據(jù)上下文對(duì)象提供的上下文對(duì)象
Student student= (Student)context.getBean("student");
System.out.println(student);
}
}
正常打印
??這種注入方式也是在XML
中進(jìn)行,只不過我們使用的屬性變成了constructor-arg
,它基于的是構(gòu)造方法的注入而不是我們的set
方法了,需要我們的實(shí)體類提供對(duì)應(yīng)的構(gòu)造方法,否則也會(huì)報(bào)錯(cuò)。
實(shí)體類代碼:
public class User {String name;
int id;
public User(String name, int id) {this.name = name;
this.id = id;
}
}
XML
文件:
主函數(shù)運(yùn)行:
public class App {public static void main(String[] args) {//1.得到spring上下文對(duì)象
ApplicationContext context=
new ClassPathXmlApplicationContext("application.xml")
User user = context.getBean("user", User.class);
System.out.println(user);
}
}
正常打印
??這種注入方法其實(shí)本質(zhì)上和set
注入沒有區(qū)別,因?yàn)樗彩腔?code>set方法進(jìn)行實(shí)現(xiàn)的,如果缺失set
方法的話同樣會(huì)報(bào)錯(cuò),感覺就是對(duì)set
注入進(jìn)行的一種簡(jiǎn)化,看上去更加簡(jiǎn)潔。XML
文件:
配置文件中請(qǐng)加入下面這行
xmlns:p="http://www.springframework.org/schema/p"
正常打印:
??這種注入方式比較少見,它是調(diào)用靜態(tài)工廠的靜態(tài)方法來創(chuàng)建Bean
,當(dāng)我們需要對(duì)象時(shí),只需要傳入?yún)?shù)調(diào)用靜態(tài)方法即可,不需要關(guān)心創(chuàng)建對(duì)象的細(xì)節(jié)問題。當(dāng)然被注入的實(shí)體類同樣需要提供set
方法,它也是基于set
注入實(shí)現(xiàn)。我們還需要再配置文件中配置靜態(tài)工廠的路徑和調(diào)用方法名以及參數(shù)。需要注意的是靜態(tài)工廠中廠本身不需要?jiǎng)?chuàng)建,可以直接通過靜態(tài)方法調(diào)用。
實(shí)體類:
@Data
public class User {String name;
int id;
public User() {}
}
XML
配置文件:
主函數(shù)運(yùn)行:
public class App {public static void main(String[] args) {//1.得到spring上下文對(duì)象
ApplicationContext context=
new ClassPathXmlApplicationContext("application.xml");
User user = context.getBean("createuser", User.class);
System.out.println(user);
}
}
正常打印:
??這個(gè)和上面的靜態(tài)工廠有點(diǎn)類似,不同的區(qū)別在于實(shí)例工廠注入,我們首先需要把這個(gè)工廠注入進(jìn)Spring
。然后在注入實(shí)體類的時(shí)候我們需要指明我們使用的是哪一個(gè)注入的工廠以及調(diào)用的是工廠內(nèi)的哪個(gè)方法,主要的區(qū)別就在于靜態(tài)工廠是不需要注入工廠的,而我們實(shí)例工廠注入由于需要實(shí)例化工廠對(duì)象,所以需要講工廠也注入進(jìn)來。注意的是改方法注入同樣依賴與set
方法。
XML
配置
此處是注入工廠
主函數(shù)運(yùn)行:
public class App {public static void main(String[] args) {//1.得到spring上下文對(duì)象
ApplicationContext context=
new ClassPathXmlApplicationContext("application.xml");
User user = context.getBean("student2", User.class);
System.out.println(user);
}
}
正常打?。?br />
3.XML注入的缺點(diǎn)??當(dāng)然現(xiàn)在主流開發(fā)都是使用的SpringBoot
框架,我們一般不采用XML
配置文件的方法去注入對(duì)象,主要它有以下缺點(diǎn):
XML
文件配置麻煩,占用資源,維護(hù)代碼的同時(shí)還得維護(hù)配置文件??這是目前最主流的注入方式,我們只需要在我們需要注入的實(shí)體類上加上相應(yīng)的注解就可以Spring
我們需要去注入它。當(dāng)然它也沒有那么只能,你在任何地方寫它都能識(shí)別到,我們首先需要配置包的掃描路徑,這樣它才會(huì)將該包下的所有添加注解的類注入。
在application.xml
添加如下配置:
base-package="需要掃描的包路徑"
1.@Controller??@Controller
注解主要用于控制層,表明我們將該類注入進(jìn)Spring
管理,注意該類路徑需要在掃描的包下。
實(shí)體類代碼:
@Controller
public class UserController {public void sayHi(String name){System.out.println("Hi"+name);
}
}
主函數(shù)運(yùn)行代碼:
??這里需要注意的是我們類名叫UserController
這種大駝峰命名,但是在通過context
取對(duì)象時(shí)卻是userController
,這是Spring
約定熟成的規(guī)矩。
public class App {public static void main(String[] args) {//1.得到spring上下文對(duì)象
ApplicationContext context=
new ClassPathXmlApplicationContext("application.xml");
UserController userController = context.getBean("userController", UserController.class);
userController.sayHi("張飛");
}
}
正常運(yùn)行:
??同樣具有注入功能,只不過我們一般寫在Service
層。
@Service
public class UserService {public void sayHi(String name){System.out.println("Hi"+name);
}
}
3.@Repository??同樣具有注入功能,我們一般用在數(shù)據(jù)訪問層,也就是常說的DAO
層。
@Repository
public class UserRepository{public void sayHi(String name){System.out.println("Hi"+name);
}
}
4.@Component??同樣具有注入功能,它指的是我們注入的是一個(gè)組件,那么什么是組件呢?我也說不清楚哈哈哈,反正不是使用上面的三種的情況下我們就使用該注解注入。
@Component
public class UserComponent {public void sayHi(String name) { System.out.println("Hi"+name);
}
}
5.@Configuration??同樣具有注入功能,它表示我們注入的類是一個(gè)配置類。
@Configuration
public class UserConfiguration {public void sayHi(String name) { System.out.println("Hi"+name);
}
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享題目:【Spring從入門到實(shí)戰(zhàn)】第3講:Spring中Bean的注入方式-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://www.rwnh.cn/article30/cejdpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、電子商務(wù)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站維護(hù)、網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容