Spring JDBC将DataSource注入另一个bean

时间:2015-10-24 19:20:26

标签: java spring jdbc

我是Spring的新手。在学习它的同时,我决定使用JDBC。

简而言之,我有两个班级:

第1类包含:

import javax.sql.DataSource;
public class class1 extends class2 {

    private Connection con;
    private DataSource dataSource;

    public void setDataSource(DataSource ds) {
        dataSource = ds;
    }

public void getConnection(){
login(username,password,url);
con = dataSource.getConnection();
}
}

Class 1基本上是我要求用户输入用户名/密码/ ur然后从class2调用方法传递这些细节的地方。我想将此类的DataSource值注入class1。到目前为止,这是我的class2代码:

import javax.sql.DataSource;

import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

abstract class class2{
public void login(String username, String password, String url){
GenericApplicationContext context = new GenericApplicationContext();
            DefaultListableBeanFactory factory = (DefaultListableBeanFactory) context.getBeanFactory();

            BeanDefinitionBuilder bean1 = BeanDefinitionBuilder
                    .rootBeanDefinition("org.springframework.jdbc.datasource.DriverManagerDataSource");
            bean1.addPropertyReference("driverClassName", "dataSource");
            bean1.addPropertyValue("driverClassName", "com.mysql.jdbc.Driver");
            bean1.addPropertyReference("url", "dataSource");
            bean1.addPropertyValue("url", "url");
            bean1.addPropertyReference("username", "dataSource");
            bean1.addPropertyValue("username", username);
            bean1.addPropertyReference("password", "dataSource");
            bean1.addPropertyValue("password", password);
            bean1.registerBeanDefinition("dataSource", bean1.getBeanDefinition());

            BeanDefinitionBuilder bean2 = BeanDefinitionBuilder.rootBeanDefinition("class2");
            bean2.addPropertyValue("dataSource", "getCon");
            context.refresh();
            bean2.addPropertyValue("dataSource", new RuntimeBeanReference("dataSource"));

            factory.registerBeanDefinition("getCon", bean2.getBeanDefinition());

}
}

但是,当我尝试从class1执行方法getConnection()时,它会给出NPE。谁能告诉我这样做的正确方法?

另外,我想以编程方式执行此任务(而不是使用xml)。

1 个答案:

答案 0 :(得分:0)

如果你想在Spring中这样做,那么你需要在应用程序上下文xml中声明一个bean定义来创建数据源并注入你的类。

或者,您可以使用spring jdbc创建数据源。看看这个链接:

http://examples.javacodegeeks.com/enterprise-java/spring/jdbc/create-data-source-for-jdbctemplate/