日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring核心注释

發布時間:2023/12/3 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring核心注释 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹:

org.springframework.beans.factory.annotation和org.springframework.context.annotation包中存在的Spring注釋通常稱為Spring Core注釋。 我們可以將它們分為兩大類:DI相關的注釋和上下文配置注釋

在本教程中,我們將探索所有這些Spring Core批注。

與DI相關的注釋:

1.

我們使用@Autowired標記將由Spring容器注入的依賴項。 它可以與構造函數,setter或基于字段的注入一起使用。

構造函數注入:

public class Employee {private Department dept;@Autowiredpublic Employee(Department dept) {this.dept = dept;} }

對于基于構造函數的注入,所有構造函數參數都是必需的。 從Spring 4.3開始,除非有兩個或多個,否則我們可以跳過使用@Autowired批注顯式批注的構造函數。

場注入:

public class Employee {@Autowiredprivate Department dept; }

二傳手注射:

public class Employee {private Department dept;@Autowiredpublic void setDept(Department dept) {this.dept = dept;} }

@Autowired批注還接受一個名為required的可選布爾參數。 默認情況下,其值設置為true。 我們可以將其顯式設置為false ,當自動裝配失敗時,Spring不會拋出異常。

2.

當我們有多個相同類型的bean時,我們將@Qualifier和@Autowired注釋一起使用以避免歧義。

假設我們有兩個類:

@Component public class Employee implements Person {}@Component public class Student implements Person {}

由于它們都實現了Person接口,因此Spring無法使用@Autowired知道要注入哪個Person bean。 要解決此問題,我們可以使用@Qualifier批注:

public class Main {@Autowired@Qualifier("employee")private Person person; }

就像@Autowired一樣,我們可以將其與setter,構造函數或基于字段的注入一起使用。

3.

現在我們知道,當我們有多個相同類型的bean時,可以將@Qualifier和@Autowired一起使用。 但是,大多數時候,我們特別需要這些bean的實例之一,很少需要其他實例。 我們可以 使用@Primary批注 標記 最常用的bean。 有了它,所有不合格的注入都將解析為我們的主bean。

@Primary @Component public class Employee implements Person {}@Component public class Student implements Person {}@Component public class EmployeeHandler {@Autowiredprivate Person employee; }@Component public class StudentHandler {@Autowired@Qualifier("student")private Person student; }

由于我們已經在StudentHandler中指定了限定詞,因此將注入Student bean。 對于EmployeeHandler ,我們跳過了限定符,因此將注入Employee 。 就像Employee是我們類型Person的主要bean一樣。

4.

@Bean是@Configuration類中使用的方法級注釋。 它標記了用于實例化Spring bean的工廠方法:

@Configuration public class AppConfig {...@Beanpublic Employee employee() {return new Employee();} }

當需要返回類型的新實例時,Spring將調用這些方法。 實例化的bean與工廠方法具有相同的名稱。 如果我們想給它一個不同的名字,我們可以使用這個注釋的name參數來做到。

@Bean("myEmp") public Employee employee() {return new Employee(); }

5.

默認情況下,Spring在應用程序啟動時實例化所有單例bean。 如果要防止這種急切的初始化,可以使用@Lazy批注。 當我們使用@Lazy批注時,將首先根據用戶請求實例化bean。

我們可以將此注釋放在:

  • @Bean帶注釋的方法可延遲特定的bean實例化
  • 一個用@Configuration注釋的類,以延遲創建該類中定義的所有bean
  • 一個標記為@Component的類 ,然后將延遲加載
  • 以及在構造函數,字段或setter上的@Autowired注釋。 同樣,在這里,容器將不會加載注入的依賴項,直到我們收到第一個用戶請求
@Configuration public class AppConfig {@Bean@Lazypublic Employee employee() {return new Employee();}@Beanpublic Student student() {return new Student();} }

它還接受一個可選的布爾參數值 ,默認值設置為true 。 如果將其設置為false ,它將熱切實例化該bean。 當我們有一個配置來延遲加載除少數幾個以外的所有bean時,這可以派上用場。

6.

@Required是在bean的setter方法上使用的方法級注釋。 它只是標記我們要使用XML填充的依賴項:

@Required void setName(String name) {this.name = name; }<bean class="com.programmergirl.spring.Employee"><property name="name" value="Joey" /> </bean>

如果不這樣做,它將拋出BeanInitializationException 。

7.

我們可以使用@Value將外部源中定義的屬性值注入到我們的bean中。 例如,我們可以在application.yaml或application.properties文件中定義一些屬性:

james.employee.id = 2563

然后將該值注入到我們的bean中:

@Value("${james.employee.id}") private String jamesEmpId;

我們也可以在SpEL中使用@Value。

8.

@DependsOn注釋可以強制Spring容器在使用@DependsOn注釋進行注釋的bean之前初始化一個或多個bean。

通常,此行為是自動的。 僅當我們具有隱式依賴項時(例如,加載JDBC驅動程序),才需要它。

我們可以在任何直接或間接使用@Component注釋的類上或在使用@Bean注釋的工廠方法上使用@DependsOn注釋。

@Configuration public class AppConfig {@Bean@DependsOn(value = {"employee"})public Dependent dependent() {return new Dependent();}}

9.

我們使用@Scope批注定義@Component類或@Bean定義的范圍。 它可以是單例,原型,請求,會話,globalSession或某些自定義范圍。

@Component @Scope("prototype") public class Employee {}

10.

一個帶有@Lookup注釋的方法告訴Spring在調用它時返回該方法的返回類型的實例。 它對以下有用:

  • 將原型bean注入單例實例
  • 程序注入依賴

要了解如何將原型bean注入到singleton bean中,請隨時參考本文。

上下文配置注釋:

我們可以使用以下注釋配置應用程序上下文:

1. @個人資料

如果我們希望Spring僅在特定配置文件處于活動狀態時使用@Component類或@Bean方法,則可以使用@Profile批注對其進行標記。 我們可以使用此批注的value參數提及配置文件的名稱:

@Component @Profile("dev") public class Employee {}

2.

使用此批注,我們可以指定一個或多個要導入的@Configuration類。

@Configuration public class EmployeeConfig {@Beanpublic Employee employee() {return new Employee();} }@Configuration @Import(EmployeeConfig.class) public class AppConfig {@Beanpublic Student student() {return new Student();} }

這樣,我們就可以在初始化應用程序上下文時顯式指定AppConfig類。 它將自動導入在EmployeeConfig中定義的bean 。

3.

我們可以使用此批注將bean從applicationContext.xml文件加載到ApplicationContext中

@Configuration @ImportResource({"classpath*:applicationContext.xml"}) public class AppConfig { }

4.

此批注提供了一種方便的方法來定義用于應用程序設置的屬性文件:

@Configuration @PropertySource("classpath:appConfig.properties") public class DatabaseConfig implements InitializingBean {@AutowiredEnvironment env;...void setDbConfig() {DataSourceConfig config = new DataSourceConfig();config.setDriver(env.getProperty("jdbc.driver"));config.setUrl(env.getProperty("jdbc.url"));config.setUsername(env.getProperty("jdbc.username"));config.setPassword(env.getProperty("jdbc.password"));}}

5.

我們可以使用此批注指定多個@PropertySource配置:

@Configuration @PropertySources({ @PropertySource("classpath:/student.properties"),@PropertySource("classpath:/employee.properties"),@PropertySource("classpath:/database.properties") }) class AppConfig {}

從Java 8開始,我們只需使用重復注釋功能即可實現相同功能,即直接指定多個@PropertySource注釋。

結論:

在本文中,我們介紹了最常見的Spring核心注釋。 我們可以將它們用于Bean接線或配置應用程序上下文。

翻譯自: https://www.javacodegeeks.com/2019/05/spring-core-annotations.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Spring核心注释的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。