注释 - 如何加载Spring配置类?

时间:2016-04-02 18:39:10

标签: java spring

我有一个简单的项目,我希望从CarDaoImpl::save运行方法Main::runApp。我有@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();
    }
}

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以在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。例如,向@Transactional中的方法添加Main或其他面向方面的注释将完全没有效果。

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