статический метод для возврата источника данных в службу покоя - PullRequest
0 голосов
/ 24 января 2019

Я разработал класс фабрики соединений, как показано ниже, в моем проекте отдыха, но меня перепутали с использованием статического ключевого слова после просмотра нескольких сообщений в Интернете и в stackoverflow. Пожалуйста, помогите мне прояснить мои сомнения по поводу этого дизайна, плохого или хорошего.

public class ConnectionFactory{
public Connection lookupConnection(){
//lookup datasource from application server
return connection;
}
}

И в моем классе ресурсов REST выполнить некоторую операцию над объектом соединения, полученным с помощью объекта ConnectionFactory

@Path("/mypath")
public class RestSample{

public Response updateDetails(MyObj obj)
{
   Connection conn=new ConnectionFactory().lookupConnection();
   return conn.doSomeOperation();
}
}

Я знаю, что это будет отлично работать в многопоточной среде, но я без необходимости создаю объект ConnectionFactory для каждого запроса? Должен ли я вместо этого сделать метод lookupConnection статическим и ссылаться на него, используя имя класса ConnectionFactory, поскольку метод не ссылается ни на одну глобальную переменную? Не вызовет ли это проблемы параллелизма, когда многие пользователи вызывают службу?

1 Ответ

0 голосов
/ 24 января 2019

Вы можете объявить lookupConnection как static, что я бы не предпочел.
Я бы предпочел шаблон проектирования с именем Singleton:

public class ConnectionFactory{
private ConnectionFactory conFactory;

//prevent instanciation from outside
private ConnectionFactory() {}

public static synchronized getFactory() {
  if(ConnectionFactory.conFactory == null) { ConnectionFactory.conFactory = new ConnectionFactory(); }
  return ConnectionFactory.conFactory;
}

//methods of object are non-static
}

Этот класс является поточно-ориентированным.Помните о synchronized, он вам нужен, потому что создание объекта не является атомарной операцией в JVM.Получите доступ к вашей фабрике, позвонив по номеру ConnectionFactory.getFactory() из любой точки вашего кода.Метод даст вам объект, если он еще не создан, он сделает это за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...