Java 日志显示autowire已经完成,但是在使用对象时会抛出一个NPE

Java 日志显示autowire已经完成,但是在使用对象时会抛出一个NPE,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,我正在尝试使用@Autowire注入DAO。将日志级别设置为debug,我可以看到bean被创建并连接到服务类,但是,当我尝试使用注入的对象时,会抛出一个nullpointerexecption 英语不是我的主要语言,但查看下面的日志,DAO似乎是创建的,并正确连接到服务: DefaultListableBeanFactory:221 - Creating shared instance of singleton bean 'ticketServiceImpl' DefaultListableB

我正在尝试使用@Autowire注入DAO。将日志级别设置为debug,我可以看到bean被创建并连接到服务类,但是,当我尝试使用注入的对象时,会抛出一个nullpointerexecption

英语不是我的主要语言,但查看下面的日志,DAO似乎是创建的,并正确连接到服务:

DefaultListableBeanFactory:221 - Creating shared instance of singleton bean 'ticketServiceImpl'
DefaultListableBeanFactory:450 - Creating instance of bean 'ticketServiceImpl'
InjectionMetadata:72 - Registered injected element on class [br.com.xpto.sys.business.impl.TicketServiceImpl]: AutowiredFieldElement for private br.com.xpto.sys.dao.api.TicketDAO br.com.xpto.sys.business.impl.TicketServiceImpl.dao
DefaultListableBeanFactory:523 - Eagerly caching bean 'ticketServiceImpl' to allow for resolving potential circular references
InjectionMetadata:86 - Processing injected element of bean 'ticketServiceImpl': AutowiredFieldElement for private br.com.xpto.sys.dao.api.TicketDAO br.com.xpto.sys.business.impl.TicketServiceImpl.dao
DefaultListableBeanFactory:221 - Creating shared instance of singleton bean 'ticketDAOImpl'
DefaultListableBeanFactory:450 - Creating instance of bean 'ticketDAOImpl'
AnnotationTransactionAttributeSource:108 - Adding transactional method 'TicketDAOImpl.findByTicketNumber' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; ''
InfrastructureAdvisorAutoProxyCreator:538 - Creating implicit proxy for bean 'ticketDAOImpl' with 0 common interceptors and 1 specific interceptors
JdkDynamicAopProxy:115 - Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [br.com.xpto.sys.dao.impl.TicketDAOImpl@2242b3b8]
DefaultListableBeanFactory:478 - Finished creating instance of bean 'ticketDAOImpl'
AutowiredAnnotationBeanPostProcessor:480 - Autowiring by type from bean name 'ticketServiceImpl' to bean named 'ticketDAOImpl'
DefaultListableBeanFactory:478 - Finished creating instance of bean 'ticketServiceImpl'
NPE进入dao.findByTicketId(ticketId)调用。由于dao为null,因此它抛出异常

我试着在阅读和发帖之后做些小改动,但没有成功

下面我发布了代码的主要部分。欢迎任何建议

更新

根据要求,我还发布了如何实例化TicketServiceImpl类和堆栈跟踪

该类在ItemProcessor bean中实例化(spring批处理)

TicketDAOImpl

@Service
public class TicketServiceImpl implements TicketService {

    @Autowired
    private TicketDAO dao;

    @Override
    public Ticket findByTicketId(int ticketId) {
        return dao.findByTicketId(ticketId);
    }
}
@Repository
public class TicketDAOImpl extends implements TicketDAO {
    @Override
    public Ticket findByTicketId(int ticketId) {
        String jpql = "SELECT t FROM Ticket t WHERE t.id = :ticketId";

        Query query = getSession().createQuery(jpql);
        query.setParameter("ticketId", ticketId);
        query.setMaxResults(1);

        Object obj = query.uniqueResult();
        return (Ticket) obj;
    }
}
public interface TicketDAO extends DAO<Ticket> {
    Ticket findByTicketId(int ticketId);
}
TicketDAO

@Service
public class TicketServiceImpl implements TicketService {

    @Autowired
    private TicketDAO dao;

    @Override
    public Ticket findByTicketId(int ticketId) {
        return dao.findByTicketId(ticketId);
    }
}
@Repository
public class TicketDAOImpl extends implements TicketDAO {
    @Override
    public Ticket findByTicketId(int ticketId) {
        String jpql = "SELECT t FROM Ticket t WHERE t.id = :ticketId";

        Query query = getSession().createQuery(jpql);
        query.setParameter("ticketId", ticketId);
        query.setMaxResults(1);

        Object obj = query.uniqueResult();
        return (Ticket) obj;
    }
}
public interface TicketDAO extends DAO<Ticket> {
    Ticket findByTicketId(int ticketId);
}

如何获得该服务的实例?发布该代码,以及异常的堆栈跟踪。@JBNizet根据请求更新了该发布。谢谢。您正在创建一个
新的TicketServiceImpl()不是spring管理的bean。您需要自动编写它或从服务定位器获取它。此链接将帮助您创建服务定位器。如果您将处理器作为Springbean实例,您只需将TicketService作为实例成员自动连接即可@Autowire TicketServiceImpl srv;正如您在日志中看到的,TicketServiceImpl被实例化为一个Springbean,但是当您使用“new”时,您将创建一个新实例,而不是由spring容器管理的实例。您如何获得该服务的实例?发布该代码,以及异常的堆栈跟踪。@JBNizet根据请求更新了该发布。谢谢。您正在创建一个
新的TicketServiceImpl()不是spring管理的bean。您需要自动编写它或从服务定位器获取它。此链接将帮助您创建服务定位器。如果您将处理器作为Springbean实例,您只需将TicketService作为实例成员自动连接即可@Autowire TicketServiceImpl srv;正如您在日志中看到的,TicketServiceImpl被实例化为Springbean,但是当您使用“new”时,您将创建一个新实例,而不是由spring容器管理的实例。
AbstractStep:222 - Encountered an error executing step step1 in job job-ProcessTickets
java.lang.NullPointerException
    at br.com.xpto.sys.business.impl.TicketServiceImpl.findByTicketId(TicketServiceImpl.java:83)
    at br.com.xpto.sys.jobs.spring.TicketItemProcessor.process(TicketItemProcessor.java:24)
    at br.com.xpto.sys.jobs.spring.TicketItemProcessor.process(TicketItemProcessor.java:1)
    at org.springframework.batch.core.step.item.SimpleChunkProcessor.doProcess(SimpleChunkProcessor.java:126)
    at org.springframework.batch.core.step.item.SimpleChunkProcessor.transform(SimpleChunkProcessor.java:293)
    at org.springframework.batch.core.step.item.SimpleChunkProcessor.process(SimpleChunkProcessor.java:192)
    at org.springframework.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:75)
    at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:395)
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
    at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:267)
    at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:77)
    at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:368)
    at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215)
    at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:144)
    at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:253)
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:195)
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:141)
    at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:64)
    at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:60)
    at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:151)
    at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:130)
    at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:135)
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:301)
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:134)
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
    at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:127)
    at br.com.xpto.sys.jobs.AppStandalone.run(AppStandalone.java:111)
    at br.com.xpto.sys.jobs.AppStandalone.main(AppStandalone.java:75)