gpt4 book ai didi

java - 将 Singelton 转换为 Java Spring

转载 作者:行者123 更新时间:2023-12-01 12:07:57 24 4
gpt4 key购买 nike

我已经根据单例模式创建了一个数据库对象。数据库对象包含 2 个方法:connect() 和 update()。

我想将这个 singleton 转换为 Spring bean。

所以我创建了一个 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-3.0.xsd">

<bean id="MySingeltonDB"
class="SingeltonDBVersion2.SingeltonDB" factory-method="getInstance"></bean>

</beans>

添加 SingeltonDB 类:

package SingeltonDBVersion2;
public class SingeltonDB {
private static DBconnImpl db = null;
private static SingeltonDB singalDb = null;

private SingeltonDB(String username, String password) {
db = new DBconnImpl();
}

public static boolean isOpen() {
return (db != null);
}

public synchronized static SingeltonDB getInstance(String username,
String password) throws Exception {

if (db != null) {
return singalDb;
}
System.out.println("The database is now open");
singalDb = new SingeltonDB(username, password);
db.connect(username, password);
System.out.println("The database was connected");
return singalDb;
}

public void create(String tableName) throws Exception {
db.create(tableName);
}

public User query(String tableName, int rowID) throws Exception {
if (db == null) {
System.out.println("Error: the database is not open");
return null;
}
return (db.query(tableName, rowID));
}

public void update(String tableName, User user) throws Exception {
if (db == null) {
System.out.println("Error: the database is not open");
return;
}
db.update(tableName, user);
}

}

这是主类:

package SingeltonDBVersion2;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
public static void main(String[] args) throws Exception {
ApplicationContext context =new ClassPathXmlApplicationContext("spring.xml");

}
}

但我收到此错误:创建在类路径资源 [spring.xml] 中定义的名称为“MySingeltonDB”的 bean 时出错:通过索引为 1 类型 [java.lang] 的构造函数参数表达的依赖关系不满足.String]:不明确的工厂方法参数类型 - 您是否指定了正确的 bean 引用作为工厂方法参数?

有人可以帮我吗?我是 Spring 的新人,所以我可能没有正确配置所有内容......谢谢!

最佳答案

当 spring 实例化单例时,它将使用“getInstance”方法,但该方法需要两个参数:用户名和密码。但这些参数不在Spring配置中。您需要添加它们:

<bean id="MySingeltonDB"
class="SingeltonDBVersion2.SingeltonDB" factory-method="getInstance">
<constructor-arg value="userName" />
<constructor-arg value="password" />
</bean>

然后你可以从应用程序上下文中获取MySingletonDB bean:

ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
SingletonDB singletonDB = (SingletonDB)context.getBean("MySingeltonDB");
singletonDB.update(paramters);

关于java - 将 Singelton 转换为 Java Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27463241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com