уточнение терминов .java и случайных слов - PullRequest
0 голосов
/ 03 апреля 2011

Я действительно новичок в java, jsf, jsp, и мне нужно узнать, как это работает быстро. Таким образом, у веб-сайта, который я использую для практики, есть некоторые термины и т. Д., Которые я не знаю, что они имеют в виду, и я надеюсь, что кто-нибудь сможет объяснить, что они означают и как / для чего они используются:)

Requestscoped
Applicationscoped
Sessionscoped
EntityManager

а кто-нибудь может рассказать мне, что делают эти строки?

@RequestScoped
public class Dao {

    @DataRepository
    @Inject
    private EntityManager entityManager;

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011

Прежде всего, в Java (5 и выше) «вещи», начинающиеся с @ (например, @Deprecated), называются аннотациями .

Аннотации предоставляют данные о Программа, которая не является частью Сама программа У них нет прямых влияние на работу кода они комментируют.

Ваш JavaBeans должен быть настроен на область, если вы хотите использовать его в JSF (определения можно найти здесь ).

  • @RequestScoped: объекты с этой областью видны от начала запроса до конца запроса. Область запроса начинается в начале запроса и заканчивается, когда ответ отправлен клиенту. Если запрос перенаправлен, объекты видны на перенаправленной странице, потому что эта страница все еще является частью того же запроса / ответа цикл. Объекты с областью запроса могут использовать другие объекты без запроса, сеанса, или область применения. Если вам нужно представить это с точки зрения сервлета, управляемый компонент сохраняется в HttpServletRequest до конца запроса (когда ответ отправляется клиенту). После этого компонент больше не существует в запросе.
  • @SessionScoped: объект с областью действия сеанса видим для любого цикла запроса / ответа, который принадлежит сеансу. Объекты с этой областью сохраняют свое состояние между запросы и продолжаются до тех пор, пока объект или сеанс не станут недействительными. Объекты с сессией область может использовать другие объекты без области видимости, сессии или приложения. По сути, эти объекты хранятся в HttpSession (снова обратитесь к сервлетам). Каждый сеанс имеет идентификатор сеанса (известный как JSESSIONID), с которым связан компонент.
  • ApplicationScoped: объект с областью применения виден во всех циклах запроса / ответа для всех клиентов, использующих приложение, до тех пор, пока приложение активно. С точки зрения сервлета это может быть управляемый бин, хранящийся в ServletConfig.
  • @NoneScoped: объекты с этой областью не видны ни на одной странице JSF. При использовании в файле конфигурации они указывают управляемые компоненты, которые используются другими управляемыми компонентами в приложении. Объекты без области видимости могут использовать другие объекты без области видимости.

Для EntityManager это связано с контекстом постоянства. Он используется для создания и удаления постоянных экземпляров сущностей, для поиска сущностей по их идентификатору первичного ключа и для запроса по всем сущностям. Для получения дополнительной информации обратитесь к спецификации JPA (Java Persistence API) или Hibernate .

@Inject, означает, что экземпляр является инъекционным. Они следуют за позорным ключевым словом Depency Injection или Inversion of Control (IOC) . Это в основном означает, что когда требуется ресурс (в вашем случае EntityManager entityManager, контейнер JEE создает для вас ресурс (без необходимости создавать его непосредственно с помощью, например, конструктора и т.

Понятия не имею, что означает @DataRepository. Никогда раньше не видел.

Надеюсь, это поможет вам.

1 голос
/ 03 апреля 2011

Эти термины обычно связаны с каркасом внедрения зависимостей, таким как guice, а не с java, в частности.

http://code.google.com/p/google-guice/wiki/Scopes описывает различные области действия, встроенные в guice.

По умолчанию Guice возвращает новый экземпляр каждый раз, когда предоставляет значение.Это поведение настраивается с помощью областей.Области позволяют вам повторно использовать экземпляры: для времени жизни приложения (@Singleton), сеанса (@SessionScoped) или запроса (@RequestScoped).Guice включает в себя расширение сервлета, которое определяет области для веб-приложений.Пользовательские области могут быть написаны для других типов приложений.

...