java - 在 Spring 3 中使用@Autowired

标签 java spring

我有一个使用 Spring 3 的 JPA 应用程序。我正在尝试使用 @PostConstuct 来初始化具有特定设施代码的数据库。当我在具有 @PostConstuct 方法的类中保留代码时 - 它可以工作。当我调用第二个类来保存代码时,它失败了。这与我使用 @Autowired 注释的方式有关吗?

这是 Preloader 类的一部分:

public class Preloader {
   @Autowired
   private FacilityService service;

   @PostConstruct
   public void init() {
      loadCodeSet();
   }

   private void loadCodeSet() {
      // This works
      Facility created = new Facility();
      created.setCode("Uni");
      created.setDescription("University");

      Facility returned = service.create(created);

      // This fails
      CodeSetLoader cl = new CodeSetLoader();
      l.load();
    }

这是加载类的一部分:

public class CodeSetLoader {

    @Autowired
        private FacilityService facilityService;

    public void load() {
        loadFacilities();
    }

    private void loadFacilities() {
        Facility test = new Facility();
        test.setCode("UNI");
        test.setDescription("University");

        Facility returned = facilityService.create(test);
    }

异常(exception)情况包括:

Caused by: java.lang.NullPointerException
    at util.CodeSetLoader.loadFacilities(CodeSetLoader.java:42)
    at util.CodeSetLoader.load(CodeSetLoader.java:24)
    at util.Preloader.loadCodeSet(Preloader.java:68)
    at util.Preloader.init(Preloader.java:32)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:344)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:295)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:130)
    ... 22 more

希望有人能够提供帮助吗?

最佳答案

@Autowired@PostConstruct 及其 friend 仅适用于托管 bean,而不适用于您调用 new 的对象。如果 Spring 不知道该 bean,它就无法 Autowiring 它。

关于java - 在 Spring 3 中使用@Autowired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19354162/

相关文章:

spring - 使用 Spring Boot >= 2.0.1.RELEASE 将 ZonedDateTime 保存到 MongoDB 时出现 CodecConfigurationException

java - 如何从 Java 中的 REST Web 服务中的 curl 获取参数值

java - 使用 href 作为定位器很难单击 anchor 标记

java - if (string.contains) 在最终输出中混合变量放置

java - 这是多余的 NullPointerException 捕获吗?

java - Spring MVC : Controller does not run in an ApplicationContext

spring - 在实际 Web 请求之外使用请求范围的 bean

spring - 为什么这个流和 lambda 表达式不能与 SpELL 声明一起使用?

java - Jooq 错误 : missing FROM-clause entry for table for nested query(sum and group by)

java - 输出流仅保存 16 位的一半