java - annotation - 如何加载 Spring 配置类?

标签 java spring

我有一个简单的项目,我想从 Main::runApp 运行方法 CarDaoImpl::save。我有带有 @Configration 注释的类,但我的 @Autowired 字段为空并且我收到 NullPointerException,因为配置类未加载,我该如何解决这个问题?

public class Main {

    @Autowired
    private CarDao carDao;

    //psvm(){}

    public void runApp(){
        carDao.save(new Car());  //carDao is null
    }
}

配置类

@Configuration
public class BeanInit {

    @Bean
    public CarDao carDao(){
        return new CarDaoImpl();
    }
}

谢谢!

最佳答案

您可以向 Main 添加一个构造函数,在其中创建一个新的 AnnotationConfigApplicationContext,然后使用该上下文来启动该对象。

public class Main {

    @Autowired
    private CarDao carDao;

    public Main() {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanInit.class);
        ctx.getAutowireCapableBeanFactory().autowireBean(this);
    }

    //psvm(){}

    public void runApp(){
        carDao.save(new Car());  //carDao is null
    }
}

请注意,这不会使 Main 成为 Spring 管理的 bean。例如,向 Main 中的方法添加 @Transactional 或其他面向方面的注释将完全没有效果。

让 Main::runApp 的调用者启动应用程序上下文并通过将 Main 包含在配置中让 Main 成为 spring 管理的 bean 可能是一个更好的主意。然后您可以使用 ctx.getBean(Main.class) 来检索 bean。

关于java - annotation - 如何加载 Spring 配置类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36377314/

相关文章:

java - 在另一个 Controller 中获取模型和 View 对象

java - 删除多余空格函数的时间复杂度

java - Spring中请求数据(post)未绑定(bind)到POJO

Spring Redis - 主条目过期后未删除索引

Spring Boot OAuth2 提供者数据库表解释

java - 发现多个名为 [spring_web] 的片段/无法找到元素 'beans' 的声明/服务器无法访问互联网

java - 简化 Java 中的数组声明

Java、Cucumber 和 Selenium : Problems with navigate(). to()

java - 为 Loading Cache guava 编写测试用例

java - 在 Java 上验证 AWS id token