spring 属性赋值详解

常用注解:

注入对象:
@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的比较:

  1. 当该类型的注入实例只有一个:@Autowire和@Resource则直接将该实例赋值

  2. 当该类型的注入实例有多个的时候:

    (1)@Autowire:如果注入实例的时候,其中一个实例通过@Primary注入,则默认获取该实例;否则只能通过属性名称获得实例。也可以配合@Qualifier指定value直接获取实例,此时与@Primary无关。
    (2)@Resource如果注入实例的时候,则通过属性名称去获取该类型的实例。当指定name的时候,直接通过name的值获取该类型的实例。
    
  3. 没有找到对应实例的时候:

    @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;
	    }
	}

更多问题可以加公众号:代码小栈,期待为您解决更多问题

spring 属性赋值详解_第1张图片

你可能感兴趣的:(spring,spring,springmvc,spring,注解,属性注入,属性赋值)