当前位置: 首页 > 知识库问答 >
问题:

我的bean总是在注入后返回null

龚安民
2023-03-14

这是我的代码,我不知道为什么我的beanmouvementtomapitemprocessor没有被注入,它在构造函数中总是空的

@Autowired
    private MouvementToMapItemProcessor mvts;

    private Iterator it;

    public InMemoryMouvementReader() {
        it = mvts.getMouvmentFileRowMap().entrySet().iterator();
    }

下面是我的配置类:

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {


    public BatchConfiguration() {
    }


    @Bean
    public ItemReader<MouvementFileRow> mouvementMapReader() {
        return new InMemoryMouvementReader();
    }


    @Bean
    public ItemProcessor<MouvementFileRow, MouvementFileRow> mouvementMapProcessor() {
        return new MouvementToMapItemProcessor();
    }



    @Bean
    public Step generateDemmandeCommunication() {
        return stepBuilderFactory.get("generateDemmandeCommunication")
                .<MouvementFileRow, DemandeCommunication>chunk(10)
                .faultTolerant().skipLimit(Integer.MAX_VALUE).skip(CustomReaderSkipException.class)
                .reader(mouvementMapReader())
                .processor(mouvementProcessor())
                .writer(demandeCommunicationItemWriter())
                .listener(customStepListener())
                .build();
    }


public class InMemoryMouvementReader implements ItemReader<MouvementFileRow> {

    @Autowired
    private MouvementToMapItemProcessor mvts;

    private Iterator it;

    public InMemoryMouvementReader() {
        it = mvts.getMouvmentFileRowMap().entrySet().iterator();
    }

    private void initialize() {
    }

    @Override
    public MouvementFileRow read() throws Exception {
        if (it.hasNext()) {
            return mvts.getMouvmentFileRowMap().get(it.next());
        } else return null;
    }
}


@Component
public class MouvementToMapItemProcessor implements ItemProcessor<MouvementFileRow, MouvementFileRow> {

    private static final Logger log = LoggerFactory.getLogger(MouvementToMapItemProcessor.class);

    private Map<Long, MouvementFileRow> mouvmentFileRowMap;

    public MouvementToMapItemProcessor() {
        mouvmentFileRowMap = new HashMap<Long, MouvementFileRow>();

    }

    @Override
    public MouvementFileRow process(final MouvementFileRow mouvement) throws Exception {
        ........
        return null;
    }

    public Map<Long, MouvementFileRow> getMouvmentFileRowMap() {
        return mouvmentFileRowMap;
    }

我的堆栈跟踪

启动ApplicationContext时出错。若要显示自动配置报告,请在启用“debug”的情况下重新运行应用程序。11:55:29.139[restartedMain]错误O.S.Boot.SpringApplication-应用程序启动失败org.SpringFramework.Beans.factory.BeanCreationException:创建类路径资源[fr/gouv/justice/spark/FileToBaseBatch/BatchConfiguration.class]中定义的名为“Movement MapReader”的bean时出错:通过工厂方法实例化bean失败;嵌套异常为org.springframework.beans.beanInstantiationException:无法实例化[org.springframework.batch.item.itemReader]:工厂方法“movement mapreader”引发异常;嵌套异常为java.lang.NullPointerException位于org.springframework.beans.factor.support.constructorresolver.instantiateusingfactorymethod(constructorresolver.java:599)位于org.springframework.beans.factor.support.abstractautoWirecapablebeanfactor.instantiateusingfactorymethod(abstractautoWirecapablebeanfactor.java:1173)位于mework.beans.factory.support.abstractbeanfactory.dogetBean(abstractbeanfactory.java:302)在org.springframework.beans.factory.support.abstractbeanfactory.getBean(abstractbeanfactory.java:197)在org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(ark.filetoBaseBatch.application.main(application.java:18)位于Sun.Reflect.NativeMethodAccessorImpl.Invoke0(原生方法)位于Sun.Reflect.NativeMethodAccessorImpl.Invoke(nativeMethodAccessorImpl.java:62)位于Sun.Reflect.DelegatingMethodAccessorImpl.Invoke(nativeMethodAccessorImpl.java:43)位于嵌套异常为org.springframework.beans.factor.support.SimpleInstantiationStrategy.Instantiate(SimpleInstantiationStrategy.java:189)(org.springframework.beans.factor.support.ConstructorResolver.InstantiateUsingfactoryMethod(ConstructorResolver.java:588)...省略了22个常见框架,原因是:java.lang.NullPointerException:eanMethodInterceptor.Intercept(ConfigurationClassEnhancer.java:358)位于fr.gouv.justice.spark.filetoBaseBatch.BatchConfiguration$$EnhancerBySpringCglib$$E3e5804e.MouvementMapReader()位于Sun.Reflect.NativeMethodAccessorImpl.Invoke0(原生方法)位于Sun.Reflect.NativeMethodAccessorImpl.java:62)位于

共有1个答案

南门焱
2023-03-14

您的MouvementToMapitemProcessor直到构造后才被注入到InMemoryMouvementReader中,这是导致构造函数失败并出现NullPointerException的原因。改用构造函数注入:

@Autowired
public InMemoryMouvementReader(MouvementToMapItemProcessor mvts) {
    this.mvts = mvts;
    it = mvts.getMouvmentFileRowMap().entrySet().iterator();
}

而且

@Bean
public ItemReader<MouvementFileRow> mouvementMapReader(MouvementToMapItemProcessor mvts) {
    return new InMemoryMouvementReader(mvts);
}

而且

@Bean
public Step generateDemmandeCommunication(InMemoryMouvementReader reader, MouvementToMapItemProcessor mvts) {
    return stepBuilderFactory.get("generateDemmandeCommunication")
            .<MouvementFileRow, DemandeCommunication>chunk(10)
            .faultTolerant().skipLimit(Integer.MAX_VALUE).skip(CustomReaderSkipException.class)
            .reader(reader)
            .processor(mvts)
            .writer(demandeCommunicationItemWriter())
            .listener(customStepListener())
            .build();
}
 类似资料:
  • 我有一个@sessionscoped bean,一个带有@stateless注释和@inject the bean和@ejb我的EJB的Restful Jersey服务。 当我试图从浏览器的URL调用rest web服务时,服务会注入@inject UserBean。但是当我试图从@SessionScoped UserBean中的代码调用web服务时,它不会被注入。 豆子: 1: Login fr

  • 我有一个基于XML配置的spring应用程序,其中一个bean需要com.typesafe.config.config参数作为构造函数参数。为此,我们有一个@Configuration类,其中一个方法(注释为@bean)返回一个com.typeSafe.config.config对象。 但spring启动时会抱怨“未能实例化[com.typesafe.config.config]:指定的类是接口”

  • 我使用Ehcache 2.6.8作为Spring Boot应用程序的一部分,作为Hibernate 4.3.11的二级缓存。我有一个JMX MBean,它允许我检查缓存的内容(如果您感兴趣,可以在这里查看)。 首先,我使用CacheManager名称来获取缓存列表。这很好。我可以用返回缓存。然后我调用。这很好,cacheName是“com.myapp.DomainObjectName”,键被列为“

  • 使用Spring bean作为带有@cacheable注释的键

  • 我试图打开一个文件进行解析(一个二进制文件),但是无论什么fopen()总是返回NULL。 我已经排除了几乎所有的东西,我有一个简单的测试脚本: trigger_error(var_export())的输出;是: 无论我为第二个fopen()选项指定什么标志,我都会得到相同的结果。 现在,明显的问题是该文件是否存在,以及我是否拥有读取该文件的权限?这两个问题的答案都是肯定的。我使用了相对路径和绝对

  • 在fetchplaces方法中,新的window.google.maps.places.PlacesService(map)总是返回null,并且Service.NearbySearch不会引发函数错误。 请帮忙。