更新時(shí)間:2022-08-29 10:18:39 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2901次
本文重點(diǎn)介紹 Spring 中的 bean 注入類型。從廣義上和歷史上看,它支持兩種類型的 bean 注入:
1.基于構(gòu)造函數(shù)的 Bean 注入
2.基于 Setter 的 Bean 注入
Spring 提供了各種方法來(lái)定義 bean 和配置依賴注入,使用:
XML 配置文件
@Autowired注解
Java 代碼(即配置類,只有注解)
在基于 XML 的配置中,這是最古老的方式,我們必須定義和配置所有的 bean。然后 Spring 的容器 Bean Factory 加載這個(gè) XML 并應(yīng)用配置。Java 注釋提供與 XML 文件配置相同的功能。但改用注解,例如@ Autowired、@ Service 、 @ Component等,也更簡(jiǎn)單?;?Java 代碼的配置類似于 XML 配置。但是使用注解、配置類和方法來(lái)配置 Java 代碼中的所有內(nèi)容。
本文將僅關(guān)注 Spring 中基于 Java 代碼的 bean 注入以進(jìn)行概念化。我們?cè)谙旅娴拇a示例中對(duì)此進(jìn)行了描述。
一個(gè)類指定一個(gè)依賴屬性,即另一個(gè)類實(shí)例,并使用接受參數(shù)的構(gòu)造函數(shù)實(shí)例化它。
公共 類 HourlyNews {
私人WeatherUpdate 天氣更新;
公共 HourlyNews(天氣更新更新) {
天氣更新 = 更新;
}
// 新聞的其他方法
}
HourlyNews類還提供天氣新聞更新。它通過指定對(duì)WeatherUpdate接口的依賴來(lái)實(shí)現(xiàn)良好的、松散耦合的長(zhǎng)期合同。
公共 接口 WeatherUpdate {
公共字符串getUpdate () ;
}
LocalWeatherUpdate類實(shí)現(xiàn)WeatherUpdate接口并提供本地天氣更新:
public class LocalWeatherUpdate 實(shí)現(xiàn) WeatherUpdate {
@Override
public String getUpdate () {
return "涼爽多云,22 攝氏度" ;
}
}
在上面的依賴規(guī)范之后,我們必須定義我們的 bean 并使用 Java 配置文件AppConfig.java配置 Spring 以進(jìn)行注入:
@Configuration
public class AppConfig {
@Bean
public HourlyNews hourlyNews () {
HourlyNews hourlyNews = new HourlyNews(weatherUpdate());
返回每小時(shí)新聞;
}
@Bean
public WeatherUpdate weatherUpdate () {
return new LocalWeatherUpdate();
// 或 RestWeatherUpdate()。只需在此處更改類,
// 允許更改注入的類型
}
}
@Configuration注解將其表示為 Spring 的配置類。可以有一個(gè)或多個(gè)配置類。然后,我們使用@Bean注解為L(zhǎng)ocalWeatherUpdate和HourlyNews類定義了兩個(gè) bean 。請(qǐng)注意 - 在HourlyNews類定義中,我們將依賴項(xiàng)指定為接口WeatherUpdate。但是我們只在配置 bean 時(shí)才具體化——在方法中作為L(zhǎng)ocalWeatherUpdate。
這種技術(shù)與構(gòu)造函數(shù) bean 注入非常相似。除了不使用類構(gòu)造函數(shù),我們使用 setter 方法進(jìn)行 bean 注入。所以我們上面的示例代碼將大部分保持不變。但是需要做兩處改動(dòng):一處是在HourlyNews類中,即我們將移除構(gòu)造函數(shù)方法并添加一個(gè)默認(rèn)構(gòu)造函數(shù)和一個(gè) setter 方法。另一個(gè)在配置類中。
公共 類 HourlyNews {
私人WeatherUpdate 天氣更新;
公共 每小時(shí)新聞() {}
公共 無(wú)效 setWeatherUpdate ( WeatherUpdate weatherUpdate ) {
this .weatherUpdate = weatherUpdate;
}
// 新聞的其他方法
}
AppConfig.java文件更改:
@Configuration
public class AppConfig {
@Bean
public HourlyNews hourlyNews () {
每小時(shí)新聞 hourlyNews = new HourlyNews();
hourlyNews.setWeatherUpdate(weatherUpdate());
返回每小時(shí)新聞;
}
@Bean
public WeatherUpdate weatherUpdate () {
return new LocalWeatherUpdate();
// 或 RestWeatherUpdate()。只需在此處更改類,
// 允許更改注入的類型
}
}
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)