Я понимаю, знаю, что у меня была плохая идея реализации.Мне все еще нужен конструктор, поэтому создание класса со статическими функциями и статическим init - плохая идея, и попытка выполнить статический установщик из bean-компонента не логична и невозможна.
Вместо этого я изменил класс накласс синглтона, так что я смогу использовать его где угодно в моем приложении, и он будет создан только один раз.
спасибо за всю информацию.
update
Iдо сих пор не знаю, если это хороший метод, но, по крайней мере, он работает.
в моем red-web.xml (рассмотрим его как spring applicationContext.xml), у меня есть следующее:
<bean id="MysqlDb" class="com.xpogames.gamesisland.mysql.MysqlDb" init-method="getInstance">
<property name="idDataSource" ref="idDataSource"/>
</bean>
Здесь он создает bean-компонент MysqlDb и настраивает его для использования метода getInstance()
init, если MysqlDb Class.я удостоверился, что у меня есть функция setidDataSource () в классе mysqlDb для правильной установки источника данных.
<bean id="web.handler" class="com.xpogames.gamesisland.Application">
<property name="MysqlDb" ref="MysqlDb"/>
</bean>
Здесь я создаю основной компонент моего приложения, и я удостоверился, что у меня есть функция setMysqlDb длякласс MysqlDb, который должен быть установлен из конфигурации bean-компонента.
Пока что mysqlDb действует как класс singelton, потому что его конструктор защищен и создает экземпляр только один раз:Я сталкивался с тем, что в других частях моего приложения всякий раз, когда я использовал getInstance (), появлялся класс MysqlDb и все переменные, которые были установлены с помощью setidDataSource где null
.
, чтобы решить эту проблему, я создал еще одну функцию с именем setInstance
в mysqlDb:
public static void setInstance (MysqlDb db) {instance = db;}
это моя основная функция setMysqlDb в моем основном приложении:
public void setMysqlDb(MysqlDb db) {
this._mysqlDb=db;
/* it seems that without forcing a setInstance on the class, whenever other classes
* would try to getInstance(), variables that are supposed to be configured by the bean
* would be empty. this resolves that issue
*/
MysqlDb.setInstance(db);
}
, так что эта конфигурация работает.это явно не рекомендуемое или лучшее решение!но мне кажется, что мне нужно больше читать и учиться, прежде чем я найду лучшее решение.