javascript
spring 注释_Spring核心注释
spring 注釋
介紹:
org.springframework.beans.factory.annotation和org.springframework.context.annotation包中存在的Spring注釋通常稱為Spring Core注釋。 我們可以將它們分為兩大類:DI相關(guān)的注釋和上下文配置注釋:
在本教程中,我們將探索所有這些Spring Core批注。
與DI相關(guān)的注釋:
1.
我們使用@Autowired標(biāo)記將由Spring容器注入的依賴項。 它可以與構(gòu)造函數(shù),setter或基于字段的注入一起使用。
構(gòu)造函數(shù)注入:
public class Employee {private Department dept;@Autowiredpublic Employee(Department dept) {this.dept = dept;} }對于基于構(gòu)造函數(shù)的注入,所有構(gòu)造函數(shù)參數(shù)都是必需的。 從Spring 4.3開始,除非我們有兩個或多個,否則我們可以跳過使用@Autowired注釋的顯式注釋構(gòu)造函數(shù)的注釋。
場注入:
public class Employee {@Autowiredprivate Department dept; }二傳手注射:
public class Employee {private Department dept;@Autowiredpublic void setDept(Department dept) {this.dept = dept;} }@Autowired批注還接受一個名為required的可選布爾參數(shù)。 默認(rèn)情況下,其值設(shè)置為true。 我們可以將其顯式設(shè)置為false ,當(dāng)自動裝配失敗時,Spring不會拋出異常。
2.
當(dāng)我們有多個相同類型的bean時,我們將@Qualifier和@Autowired注釋一起使用以避免歧義。
假設(shè)我們有兩個類:
@Component public class Employee implements Person {}@Component public class Student implements Person {}由于它們都實現(xiàn)了Person接口,因此Spring無法使用@Autowired知道要注入哪個Person bean。 要解決此問題,我們可以使用@Qualifier批注:
public class Main {@Autowired@Qualifier("employee")private Person person; }就像@Autowired一樣,我們可以將其與setter,構(gòu)造函數(shù)或基于字段的注入一起使用。
3.
現(xiàn)在我們知道,當(dāng)我們有多個相同類型的bean時,可以將@Qualifier和@Autowired一起使用。 但是,大多數(shù)時候,我們特別需要這些bean的實例之一,而很少需要其他實例。 我們可以 使用@Primary批注 標(biāo)記 最常用的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; }由于我們已經(jīng)在StudentHandler中指定了限定詞,因此將注入Student bean。 對于EmployeeHandler ,我們跳過了限定符,因此將注入Employee 。 就像Employee是我們類型Person的主要bean一樣。
4.
@Bean是@Configuration類中使用的方法級注釋。 它標(biāo)記了用于實例化Spring bean的工廠方法:
@Configuration public class AppConfig {...@Beanpublic Employee employee() {return new Employee();} }當(dāng)需要返回類型的新實例時,Spring將調(diào)用這些方法。 實例化的bean與工廠方法的名稱相同。 如果要給它一個不同的名稱,可以使用此批注的name參數(shù)。
@Bean("myEmp") public Employee employee() {return new Employee(); }5.
默認(rèn)情況下,Spring在應(yīng)用程序啟動時實例化所有單例bean。 如果要防止這種急切的初始化,可以使用@Lazy批注。 當(dāng)我們使用@Lazy批注時,將首先根據(jù)用戶請求實例化bean。
我們可以將此注釋放在:
- @Bean帶注釋的方法可延遲特定的bean實例化
- 一個用@Configuration注釋的類,以延遲創(chuàng)建該類中定義的所有bean
- 標(biāo)記為@Component的類 ,然后將延遲加載
- 以及在構(gòu)造函數(shù),字段或setter上的@Autowired注釋。 同樣,在這里,容器將不會加載注入的依賴項,直到我們收到第一個用戶請求
它還接受一個可選的布爾參數(shù)值 ,默認(rèn)值設(shè)置為true 。 如果將其設(shè)置為false ,它將熱切實例化該bean。 當(dāng)我們有一個配置來延遲加載除少數(shù)幾個以外的所有bean時,這可以派上用場。
6.
@Required是在bean的setter方法上使用的方法級注釋。 它只是標(biāo)記我們要使用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注釋可以強(qiáng)制Spring容器在使用@DependsOn注釋進(jìn)行注釋的bean之前初始化一個或多個bean。
通常,此行為是自動的。 僅當(dāng)我們具有隱式依賴項時才需要它,例如,加載JDBC驅(qū)動程序。
我們可以在任何直接或間接使用@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在調(diào)用該方法時返回該方法的返回類型的實例。 它對以下有用:
- 將原型bean注入單例實例
- 程序注入依賴
要了解如何將原型bean注入到singleton bean中,請隨時參考本文。
上下文配置注釋:
我們可以使用以下注釋配置應(yīng)用程序上下文:
1. @個人資料
如果我們希望Spring僅在特定配置文件處于活動狀態(tài)時使用@Component類或@Bean方法,則可以使用@Profile批注對其進(jìn)行標(biāo)記。 我們可以使用此批注的value參數(shù)提及配置文件的名稱:
@Component @Profile("dev") public class Employee {}2.
使用此批注,我們可以指定一個或多個要導(dǎo)入的@Configuration類。
@Configuration public class EmployeeConfig {@Beanpublic Employee employee() {return new Employee();} }@Configuration @Import(EmployeeConfig.class) public class AppConfig {@Beanpublic Student student() {return new Student();} }這樣,我們就可以在初始化應(yīng)用程序上下文時顯式指定AppConfig類。 它將自動導(dǎo)入在EmployeeConfig中定義的bean 。
3.
我們可以使用此批注將bean從applicationContext.xml文件加載到ApplicationContext中 :
@Configuration @ImportResource({"classpath*:applicationContext.xml"}) public class AppConfig { }4.
此批注提供了一種方便的方法來定義用于應(yīng)用程序設(shè)置的屬性文件:
@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開始,我們只需使用重復(fù)注釋功能即可實現(xiàn)相同目的,即直接指定多個@PropertySource注釋。
結(jié)論:
在本文中,我們介紹了最常見的Spring核心注釋。 我們可以將它們用于Bean接線或配置應(yīng)用程序上下文。
翻譯自: https://www.javacodegeeks.com/2019/05/spring-core-annotations.html
spring 注釋
總結(jié)
以上是生活随笔為你收集整理的spring 注释_Spring核心注释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: graphql 有必要吗_您准备好观看G
- 下一篇: 微软启用 Xbox 新策略:游戏截图和录