我是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)。
答案 0 :(得分:0)
如果你想在Spring中这样做,那么你需要在应用程序上下文xml中声明一个bean定义来创建数据源并注入你的类。
或者,您可以使用spring jdbc创建数据源。看看这个链接:
http://examples.javacodegeeks.com/enterprise-java/spring/jdbc/create-data-source-for-jdbctemplate/