我试图使用jdbc appender
中的log4j2
将信息记录到数据库。我碰到了这个类来创建连接。
public class ConnectionFactory {
//couldn't understand the logic for need of this interface
private static interface Singleton {
final ConnectionFactory INSTANCE = new ConnectionFactory();
}
private final DataSource dataSource;
private ConnectionFactory() {
//necessary connection creation for DataSource datasource
//connection pooling is used here
}
public static Connection getDatabaseConnection() throws SQLException {
return Singleton.INSTANCE.dataSource.getConnection();
}
}
要获得连接,我要做的就是调用getDatabaseConnection()
类。而且有效。但是我不明白为什么我需要有一个名为Singleton的接口。如果我不使用它将发生什么。我的意思是,不要使用它,不仅是删除该代码,而且还要相应地进行其他更改,例如,如有必要,使构造方法公开,如有必要,getDatabaseConnection()
为非静态。
但是在这里真正有效地使用了名为Singleton的接口。我希望我会对此逻辑有所了解。谢谢你。
此代码也可从https://logging.apache.org/log4j/2.x/manual/appenders.html#JDBCAppender
获得答案 0 :(得分:1)
基本上ConnectionFactory类正在实现单例设计模式,该模式仅用于获取该类的单个对象/ bean。您可以从各种在线资源中研究此模式,并且会理解该类正在使用具有延迟初始化概念的Singleton。
简单定义:-
单一模式是一种设计解决方案,应用程序希望 在所有可能的情况下,只有任何一个类的一个实例 没有任何特殊情况。
单例模式的实现必须:
1)确保单例类只有一个实例存在。
2)提供对该实例的全局访问。
通常,这是通过以下方式完成的:
1)声明该类的所有构造函数均为私有。
2)提供一个静态方法,该方法返回对该实例的引用。
很少有资源可以帮助您更好地理解如何实现此设计模式:- https://howtodoinjava.com/design-patterns/creational/singleton-design-pattern-in-java/