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

更多問題可以加公衆號:代碼小棧,期待爲您解決更多問題

代碼小棧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章