2014-01-06 3 views
0

Я только что создал проект весеннего mvc, внутри него ничего нет, кроме web.xml, spring-servlet.xml и ListnerClass.java.
Я хочу инициализировать системное свойство во время запуска сервера. Для этого я создал сервлетов контекстИсключительное исключение указателя при получении источника данных из автообученного компонента

public class ListnerClass implements ServletContextListener{ 

    @Autowired 
    private DataSource dataSource; 

    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 

    } 

    @Override 
    public void contextInitialized(ServletContextEvent arg0) { 

     /* code for initializing system properties */ 
    Connection conn=dataSource.getConnection(); 

} 

я получаю NullPointerExceptin на этой линии Connection conn=dataSource.getConnection();

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 

    <servlet> 
     <servlet-name>spring</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>spring</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/spring-servlet.xml 
     </param-value> 
    </context-param> 
    <listener> 
     <listener-class>com.infocentercache.manager.ListnerClass</listener-class> 
    </listener> 

</webapp> 

весна-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

<context:annotation-config/> 

    <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"> 

     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/infocenter" /> 
     <property name="username" value="root" /> 
     <property name="password" value="gaurav" /> 
    </bean> 
</beans> 
+0

Не уверен, но контекст слушатель будет инициализирован еще до весны выполнения приходит к жизни. Поэтому автоматическая проводка может не работать. Экземпляр datasource не будет инициализирован автоматически. Вы должны использовать JNDI api непосредственно для поиска источника данных в контексте инициализированного метода –

ответ

3

зарегистрировал ServletContextListener объект в дескрипторе развертывания не управляется Spring, он управляется Servlet Con TAINER. Таким образом, Spring не имеет никакого бизнеса, вводящего в него какой-либо компонент.

Правило большого пальца есть, если у вас есть цель @Autowired, и это null, весна не была задействована. Весна будет бросать всевозможные исключения, если она не может решить цель @Autowired.

Есть обходные пути:

+0

yeap! ServletContextListener не является "компонентом" – venergiac

Смежные вопросы