spring 通过@Autowired访问我的@Service类时,通过@Value填充的字段变为null

envsm3lx  于 2023-04-10  发布在  Spring
关注(0)|答案(2)|浏览(117)

我有一个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
    }
}
oug3syen

oug3syen1#

检查以下内容:
1.无论是你自己创建一个AnotherService的示例,还是Spring为你注入它。如果你绕过Spring创建它,什么都不会注入,firstService示例将是null
1.如果它是Spring驱动的-你说你的FirstService基本上看起来像这样:

@Service
public class FirstService {
   @Value("${test.localDirectory}")
   public String localDirectory;
}

请确保您在AnotherService#test方法中获得的示例与FirstService的示例相同。同样,您可能将spring注入和常规创建对象与new混合在一起。

fnatzsnv

fnatzsnv2#

我想我弄明白了。autowired服务有null值,直到我调用getter才被填充。我一直试图直接访问public字段,这导致了null值。

相关问题