我想用JdbcTemplate。
   网上查了很久都是写一个xml文件里写一个数据源配置和导入,
然后测试时写一个main方法加载。类似:
ApplicationContext context =              
new FileSystemXmlApplicationContext("beans.xml");     
请问不能自动加载吗?
我写的setDataSouse(DataSourse dataSource)就是注入不进来。配置文件:
   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
     <property name="url" value="jdbc:mysql://localhost:3306/test"/>
     <property name="username" value="root"/>
     <property name="password" value="123456"/>
    </bean>
    
    <bean id="conn" class="db.conn">
     <property name="dataSource" ref="dataSource"/>   
    </bean>db.conn.java文件  public void setDataSource(DataSource dataSource) {
       this.jdbcTemplate=new JdbcTemplate(dataSource);
}我new一个conn后。jdbcTemplate还是空。没取到
问题是:怎么才能注入进来。。配置文件怎么自动加载。我写在applicationContext.xml里也不行

解决方案 »

  1.   

    你这样试下
    ApplicationContext context =              
    new ClassPathXmlApplicationContext("beans.xml");
    //使用context获取bean对象
    conn c = context.getBean("conn");
      

  2.   

    恩这样可以,但要把beans.xml文件放在和包"db"同一个目录下,我之前是放在web-inf下的。请问可以自动加载注入吗?
      

  3.   

    applicationContext.xml 是默认去寻找的,可以自己随便命名的,在web.xml中指定即可,例如:<!-- ============= Spring listener ============== -->
    <context-param>
    <param-name>contextConfigLocation </param-name>
    <param-value>/WEB-INF/beans*.xml </param-value>
    </context-param>
    <listener>
    <listener-class> </listener-class>
    </listener>
    指定所有以beans开始的.xml类型文件为spring的配置文件。
      

  4.   

    楼上的谢谢
    我就是把web.xml中的配置改为WEB-INF/model-config.xml也不能自动注入进来 (model-config.xml文件是数据库链接的)
    web.xml:<?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>WEB-INF/model-config.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
             <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value> /WEB-INF/dispatcher-servlet.xml,/WEB-INF/model-config.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        <welcome-file-list>
            <welcome-file>redirect.jsp</welcome-file>
            </welcome-file-list>
        </web-app>
    ----------------------------------------
    model-config.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" 
        xsi:schemaLocation="http://www.springframework.org/schema/beans    
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 
       <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
         <property name="url" value="jdbc:mysql://localhost:3306/test"/>
         <property name="username" value="root"/>
         <property name="password" value="lenven4sa"/>
        </bean>
        
        <bean id="conn" class="db.conn">
         <property name="dataSource" ref="dataSource"/>   
        </bean>
       
     </beans>
    -----------------------------------
    然后我在db.conn.java文件里这么写
    public class conn  {    private JdbcTemplate jdbcTemplate;
        public void setDataSource(DataSource dataSource) {
           this.jdbcTemplate=new JdbcTemplate(dataSource);
       }
    -----------------
    结果jdbcTemplate就是空...不能进行数据库操作。。conn还有些调用的方法省略了。
    我如果在conn的构造函数上直接初始化jdbcTemplate,没有问题。
      
      

  5.   

    不好意思
    <context-param> 
            <param-name>contextConfigLocation </param-name> 
            <param-value>WEB-INF/model-config.xml </param-value> 
        </context-param> 
    这行差了一个"/".应该是/WEB-INF/model-config.xml。我加上去后依然不行...
      

  6.   

    调用的时候难道不是:
      conn con=new conn();就初始化jdbcTemplate了?
      

  7.   

    applicationContext.xml 是默认去寻找的,可以自己随便命名的,在web.xml中指定即可,例如: <!-- ============= Spring listener ============== --> 
    <context-param> 
    <param-name>contextConfigLocation </param-name> 
    <param-value>/WEB-INF/beans*.xml </param-value> 
    </context-param> 
    <listener> 
    <listener-class> </listener-class> 
    </listener> 
    指定所有以beans开始的.xml类型文件为spring的配置文件。
      

  8.   

    空指针是正常的!
    首先在配置文件里面先配置JdbcTemplate,然后在注入给你的类,
    如果你不在配置文件里面先配置JdbcTemplate,就让你的类继承JdbcDaoSupport!!