常用註解:
注入對象:
@Autowire
@Resource
@Inject
@Autowire:
1、本身不支持name屬性,可通過@Qualifier註解解決。
2、使用位置:構造器、屬性、方法和參數
(1)、當該類使用註解被注入且只有一個有參構造器,則構造器中的參數可以省略@Autowire註解。
(2)、當使用@Bean註解注入實例,則注入方法中參數的@Autowired註解可以省略。
@Resource:
1、JSR250規範的註解
2、不支持@Primary和@Qualifier註解,也不支持require屬性。
3、使用前提:導入依賴
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
@Inject:
1、JSR250規範的註解
2、與@Autowire功能相同,不過不支持required屬性。
@Autowire和@Resource的比較:
-
當該類型的注入實例只有一個:@Autowire和@Resource則直接將該實例賦值
-
當該類型的注入實例有多個的時候:
(1)@Autowire:如果注入實例的時候,其中一個實例通過@Primary注入,則默認獲取該實例;否則只能通過屬性名稱獲得實例。也可以配合@Qualifier指定value直接獲取實例,此時與@Primary無關。 (2)@Resource如果注入實例的時候,則通過屬性名稱去獲取該類型的實例。當指定name的時候,直接通過name的值獲取該類型的實例。
-
沒有找到對應實例的時候:
@Autowire可以通過required參數指定沒有實例的時候不裝配。@Resource則會報錯。
注入屬性:
方法一:
1、@PropertySource:注入一個配置文件,可以在一個類上面重複使用
2、@Value解析環境變量
@Component
@PropertySource(value = "classpath:green.properties")
public class Green implements Serializable {
@Value("${green.name}")
private String name;
@Value("${green.age}")
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
方法二:使用spring-boot-autoconfigure自動裝配
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
mail.properties:
mail.host=localhost
mail.port=25
mail.smtp.auth=false
mail.smtp.starttls-enable=false
mail.from=me@localhost
mail.username=duan
mail.password=duan123456
@EnableAutoConfiguration
public class AutoConfigure {
}
@ConfigurationProperties(locations = "classpath:mail.properties", ignoreUnknownFields = false, prefix = "mail")
public class MailProperties implements Serializable {
private String host;
private int port;
private String from;
private String username;
private String password;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
更多問題可以加公衆號:代碼小棧,期待爲您解決更多問題