Зачем каждый раз загружать контекст приложения

1

Я использую Spring jdbc для соединения с DB. И каждый раз, когда я запускаю тестовую весну класса java, контекст также загружается каждый раз. Любое предложение?

Мой фрагмент кода ниже,

appContext.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"
    xsi:schemaLocation="
           http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/beans/spring-context-2.0.xsd ">

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/3i" />
        <property name="username" value="xxx" />
        <property name="password" value="xxx" />
    </bean>

    <bean id="jdbcTemp" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource">
        </property>
    </bean>
</beans>

Класс Java:

package com.pinovus.dbconnection;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

public class DbDao {

    private static JdbcTemplate jdbctemplate;
    private static ApplicationContext appcontext;

    public JdbcTemplate getJdbctemplate() {

        ApplicationContext cx = new ClassPathXmlApplicationContext(
                "appContext.xml");
        jdbctemplate = (JdbcTemplate) cx.getBean("jdbcTemp");
        return jdbctemplate;
    }

    public void setJdbctemplate(JdbcTemplate jdbctemplate) {
        this.jdbctemplate = jdbctemplate;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}

И тестовый класс java:

package com.pinovus.dbconnection;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.rowset.SqlRowSet;

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JdbcTemplate jt = new DbDao().getJdbctemplate();
        String qry = "select role from accounts";
        SqlRowSet rs = jt.queryForRowSet(qry);
        while (rs.next()) {
            System.out.println(rs.getString(1));
        }
    }
}
  • 0
    Вы вызываете getJdbctemplate() который каждый раз загружает контекст весны. Что вы хотите от этого?
  • 0
    Теперь я понимаю, это проблема моего кода, могу ли я сделать это без загрузки контекста приложения каждый раз, когда я вызываю метод getJdbctemplate ()
Теги:
spring
spring-jdbc

2 ответа

1
Лучший ответ

Ваш DAO не должен знать о контексте приложения и не должен явно искать в нем вещи. Вы можете переписать его, используя документацию Spring в качестве примера:

public class DbDaoImpl implements DbDao {

    private JdbcTemplate jdbcTemplate;

    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }    
    ...
}

и вы можете удалить запись jdbcTemp из контекста xml приложения. Вместо этого создайте DAO Spring, создав для него запись следующим образом:

<bean id="dbDao" class="DbDaoImpl">
    <property name="dataSource" ref="dataSource"/>
</bean>
  • 0
    спасибо за ваш ответ, но я должен сделать это с DriverManager
  • 0
    @jasim: ?? я не говорил не использовать DriverManager. Сделайте свой Дао бобом с пружинным управлением.
0

Это потому, что вы каждый раз создаете новый экземпляр:

new DbDao().getJdbctemplate();

и далее:

new ClassPathXmlApplicationContext("appContext.xml");

Это не проблема Весны. Это до вашего дизайна.

И я не знаю, как вам помочь, так как это просто правильный код Java: в любом случае в случае public static void main(String[] args) вы должны создавать объекты, чтобы получить с ними дело.

Пожалуйста, предоставьте больше информации, где ваши сомнения

  • 0
    хорошо, теперь я понимаю проблему, как это сделать без загрузки контекста весны каждый раз, когда я запускаю программу
  • 0
    Извините: сколько вы знаете о Java? При запуске программы ( java com.pinovus.dbconnection.test ) каждый раз она не только создает контекст, но даже запускает JVM
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню