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