Spring は初めてですが、プロジェクトのニーズに合わせて急いでいます。Spring を Java アプリケーションとして使用する場合、Spring のほとんどの機能を正常に使用できましたが、Web アプリケーションでは望ましい結果が得られません。
applicationContext.xml でデータソースを初期化しようとしています:
<context:annotation-config />
<context:component-scan base-package="learn.spring.webapp.dao" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/postgres" />
<property name="username" value="postgres" />
<property name="password" value="postgres" />
</bean>
<bean id="template" class="org.springframework.jdbc.core.JdbcTemplate"
autowire="constructor" />
web.xml:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
アプリケーションで Spring を正常に初期化できましたが、dao クラスで jdbctemplate を自動配線できませんでした。
package learn.spring.webapp.dao;
import learn.spring.webapp.model.Manga;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class MangaDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void insert(Manga manga){
String sql = "insert into manga_list values (?,?)";
jdbcTemplate.update(sql,
new Object[]{manga.getName(), manga.getAuthor()}); //Null Pointer exception
}
}
dao パッケージでtemplate
Beanを自動配線したい。JdbcTemplate
をNullPointerException
使用しようとすると、 が表示されますJdbcTemplate
。MangaDao
サーブレットから呼び出されています。自動配線された注釈を正しく使用していない可能性があると思います。ご意見をお聞かせください。
編集:
DAO を呼び出すサーブレット コードは次のとおりです。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
MangaDao md=new MangaDao();
Manga manga=new Manga();
manga.setName("Bleach");
manga.setAuthor("Kubo Tite");
md.insert(manga);
}
また、stackTrace は次のとおりです。
SEVERE: Servlet.service() for servlet TesterServlet threw exception
java.lang.NullPointerException
at learn.spring.webapp.dao.MangaDao.insert(MangaDao.java:16)
at learn.spring.webapp.controller.TesterServlet.doGet(TesterServlet.java:33)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)