@PropertySource
將指定類路徑下的.properties一些配置加載到Spring當中,
有個跟這個差不多的注解@PropertySources
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PropertySources {PropertySource[] value();}
使用方式,在@Configuration上面加上這個即可,不僅可以加載properties文件,加載Spring的xml也是可以的
@PropertySource(value = "classpath:/test04.properties")
這個是注解的方式,如果還是xml怎么辦,利用context包下標簽即可加入
<context:property-placeholder location="classpath:***.properties"/>
那這個注解是如何加載的呢,專門有個BeanFactoryPostProcessor解析這個注解,PropertySourcesPlaceholderConfigurer,可以自行去看一下源代碼,這里就不介紹了
組件賦值
@Value:1、直接賦值,2、支持SpringEL表達式,3、讀取環境變量數據
//直接賦值@Value("i am bird")private String name;//通過計算賦值@Value("#{24-6}")private Integer age;//通過獲取Environment變量賦值@Value("${bird.name}")private String propertiesName;
SpringEL表達式不僅僅是上面這些,還有許多沒有寫出來,大家可以參考官網docs比較好,避免誤導各位,請單擊SpringEL。
@Autowired:Spring默認取值器(默認按class取值),可作用于set方法上
? 如果容器中有多個同類型的bean,則按同變量名稱BEAN名稱,沒有找到拋異常,可和@Qualifier一同使用,如果容器沒有同類的BEAN,則默認報錯,可調整required值,當required=false則沒有取值為null,優先獲取@Component注入的BEAN
@Resource:javax.annotation包下(默認按變量名稱取值)?也是JSR250的規范中的,可作用于set方法上,?name:按BEAN名稱取值,type:按類型取值,不支持@Primary
@Qualifier:指定從Spring容器獲取指定bean名稱,和@Autowired一起使用
@Primary:當Spring有多個同類型bean時,選中其中一個為默認首選
@Inject:javax.inject包下,屬于JSR330規范中的,需額外引包
<dependency><groupId>javax.inject</groupId><artifactId>javax.inject</artifactId><version>1</version></dependency>
這次就簡單的介紹一下就好了,什么在哪里加載賦值的呀,就不細說了,都是基于BeanPostProcessor實現的,可自行調試代碼查看