其實在我的日常生活中是基本沒用過註解的。但是聽別的同學講他們公司用到的蠻多的,想學習一下。發現註解真的好牛掰哦。。可以完全拋棄 xml 的配置。。。希望我們公司也可以用註解來開發。。
其實在我的日常生活中是基本沒用過註解的。但是聽別的同學講他們公司用到的蠻多的,想學習一下。發現註解真的好牛掰哦。。可以完全拋棄 xml 的配置。。。希望我們公司也可以用註解來開發。。
註解:
@Component:代表正是個組件
@Autowired:指定類型的 bean 注入到這個字段中
@Configuration:表示它是一個配置類
@ComponentScan:搜索整個包,把所有標記為 Component 的 Bean 自動創建出來,並根據 Autowired 裝配
只需要:
每個 Bean 被標註為 @Component 並正確使用 @Autowired 注入;
配置類被標註為 @Configuration 和 @ComponentScan;
所有 Bean 均在指定包以及子包內。
@Scope (ConfigurableBeanFactory.SCOPE_PROTOTYPE) :創建一個原型 Bean
@Order :指定 List 中 Bean 的順序 分別給 Bean 標記 Order (1),Order (2)….
@Autowired (required = false): 找不到對應的 bean 就略過
@Bean (“Second”) :創建同類型的 Bean Bean 的別名
@Primary:或者指定優先級
@Autowired(required = false)
@Qualifier (“z”) // 指定注入名稱為”z” 的 ZoneId
@Value (“classpath:/logo.txt”) 注入 Resourse
@PropertySource (“app.properties”) 注入配置文件
@Value(“${app.zone}”) 注入配置文件的值
String zoneId;
“${app.zone}” 表示讀取 key 為 app.zone 的 value,如果 key 不存在,啟動將報錯;
“${app.zone}” 表示讀取 key 為 app.zone 的 value,但如果 key 不存在,就使用默認值 Z。
注入 JavaBean 持有所有的配置
@Component
public class SmtpConfig {
@Value(“${smtp.host}”)
private String host;
@Value("${smtp.port:25}")
private int port;
public String getHost() {
return host;
}
public int getPort() {
return port;
}
}
讀取配置 JavaBean 中的配置信息
@Component
public class MailService {
@Value(“#{smtpConfig.host}”)
private String smtpHost;
@Value("#{smtpConfig.port}")
private int smtpPort;
}
@Profile:表示不同的環境 native test production
@Conditional (OnSmtpEnvCondition.class):條件注入
@ConditionalOnProperty (name=”app.smtp”, havingValue=”true”) 如果配置文件中存在 app.smtp=true,則創建
@ConditionalOnClass (name = “javax.mail.Transport”) 如果目前 classpath 中存在類 javax.mail.Transport,則創建