Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

44.8. 构造方法

		
	@Autowired
    private TestService testService;
		
		

当我们使用 @Autowired 注解,构造方法先于 @Value 执行,所以我们无法在构造方法中获得 @Value 注入的值。

		
package cn.netkiller.services;

import lombok.Data;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
@Data
@Slf4j
public class TestService {
    @Value("${app.id}")
    private String appId;

    public TestService() {
        log.info(this.appId);
    }

}

		
		

@Value 作为构造方法的参数可以实现赋值需求

		
package cn.netkiller.services;

import lombok.Data;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
@Data
@Slf4j
public class TestService {

    private String appId;

    public TestService(@Value("${app.id}") String appId) {
        this.appId = appId;
        log.info(this.appId);
    }
}

		
		

同时还能使用 new 创建实例

		
    TestService test = new TestService("Test");
    test.getAppId();