我有一个Sping Boot 应用程序,我正在使用@Value注解填充服务类中的字段:
@Value("${test.localDirectory}")
public String localDirectory;
我可以确认这些被正确地拉取,因为我正在通过InitializingBean方法检查它们:
@Override
public void afterPropertiesSet() throws Exception {
logger.info(localDirectory); //returns expected value here
}
然而,当我尝试从另一个spring @Service访问这些类时,它们返回null:
@Service
public class AnotherService {
@Autowired
private FirstService firstService
public void example(){
firstService.localDirectory //returns null
}
}
这是预期的行为还是我做错了什么?
编辑:这里有一个更好的代码示例:
@Service
public class FirstService{
@Value("${test.localDirectory}")
public String localDirectory;
}
@Component
public class CommandLineRunnerExecutor implements CommandLineRunner {
@Autowired
private FirstService firstService;
@Override
public void run(String... args) throws Exception {
logger.info(firstService.localDirectory); //null
}
}
2条答案
按热度按时间oug3syen1#
检查以下内容:
1.无论是你自己创建一个
AnotherService
的示例,还是Spring为你注入它。如果你绕过Spring创建它,什么都不会注入,firstService
示例将是null
。1.如果它是Spring驱动的-你说你的
FirstService
基本上看起来像这样:请确保您在
AnotherService#test
方法中获得的示例与FirstService
的示例相同。同样,您可能将spring注入和常规创建对象与new
混合在一起。fnatzsnv2#
我想我弄明白了。autowired服务有null值,直到我调用getter才被填充。我一直试图直接访问public字段,这导致了null值。