常用注解:
注入对象:
@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;
}
}
更多问题可以加公众号:代码小栈,期待为您解决更多问题