关于#报错#的问题,如何解决?


<beans>


    
    <bean id="accountDAO" class="com.rd.edu.dao.impl.JdbcAccountDAOImpl" autowired="byName">
    bean>
    <bean id="transferService" class="com.rd.edu.service.impl.TransferServiceImpl" autowired="byName">
        
        <property name="accountDAO" ref="accountDAO">property>
    bean>
beans>

public class TransferServiceImpl implements TransferService {
    private AccountDAO accountDAO;
    public void setAccountDAO(AccountDAO accountDAO) {
        this.accountDAO = accountDAO;
    }

    @Override
    public void transfer(String fromCardNo, String toCardNo, int money) throws Exception {
            //在AccountDAO中新增一个方法,根据卡号找到这个卡的详细信息
            Account from = accountDAO.queryAccountByCardNo(fromCardNo);
            Account to = accountDAO.queryAccountByCardNo(toCardNo);
            //将韩梅梅的钱-money
            from.setMoney(from.getMoney()-money);
            //将李雷的钱+money
            to.setMoney(to.getMoney()+money);

            //在AccountDAO中新增一个修改账户中余额的方法
            accountDAO.updateAccountByCardNo(from);
            accountDAO.updateAccountByCardNo(to);
    }
}
java.lang.NullPointerException: Cannot invoke "com.rd.edu.dao.AccountDAO.queryAccountByCardNo(String)" because "this.accountDAO" is null
    at com.rd.edu.service.impl.TransferServiceImpl.transfer(TransferServiceImpl.java:20)
    at com.rd.edu.controller.TransferServlet.doPost(TransferServlet.java:37)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:833)

一直注入不了对象,有没有人帮忙看看

参考GPT和自己的思路:根据报错信息,发现是在TransferServiceImpl类中无法调用AccountDAO的queryAccountByCardNo方法,因为accountDAO对象为null。可能是因为在配置文件中autowired属性设置为byName,但是bean的id没有设置为accountDAO导致无法正确注入。解决方法是将bean的id设置为accountDAO。即将原代码中的:

<bean id="accountDAO" class="com.rd.edu.dao.impl.JdbcAccountDAOImpl" autowired="byName">
</bean>

改为:

<bean id="accountDAO" name="accountDAO" class="com.rd.edu.dao.impl.JdbcAccountDAOImpl" autowired="byName">
</bean>