0

我对 java、jsf、jsp 真的很陌生,我需要快速了解它是如何工作的。所以我用来练习的网站有一些我不知道它们的意思的术语等,我希望有人能解释它们的意思以及它们的用途/用途:)

Requestscoped
Applicationscoped
Sessionscoped
EntityManager

有人可以告诉我这些线是做什么的吗?

@RequestScoped
public class Dao {

    @DataRepository
    @Inject
    private EntityManager entityManager;
4

2 回答 2

2

首先,在 Java(5 及更高版本)中,以@(eg @Deprecated) 开头的“事物”称为注解

注释提供有关程序的数据,这些数据不属于程序本身。它们对它们注释的代码的操作没有直接影响

如果要在 JSF 中使用 JavaBeans,则需要将其配置为范围(可以在此处找到定义)。

  • @RequestScoped:具有此范围的对象从请求开始到请求结束都是可见的。请求范围从请求的开始开始,到响应发送到客户端时结束。如果请求被转发,则对象在转发页面中可见,因为该页面仍然是同一请求/响应周期的一部分。具有请求范围的对象可以使用其他具有无、请求、会话或应用程序范围的对象。如果您必须从 servlet 的角度来考虑,托管 bean 将存储在HttpServletRequest请求结束之前(当响应发送到客户端时)。之后,该 bean 不再存在于请求中。
  • @SessionScoped:具有会话范围的对象对于属于会话的任何请求/响应周期都是可见的。具有此范围的对象在请求之间保持其状态,并持续到对象或会话无效为止。具有会话范围的对象可以使用其他具有无、会话或应用程序范围的对象。基本上,这些对象都存储在一个HttpSession(再次参考 Servlets)中。每个会话都有一个与 bean 相关联的会话 ID(称为JSESSIONID)。
  • ApplicationScoped:只要应用程序处于活动状态,具有应用程序范围的对象在所有使用该应用程序的客户端的所有请求/响应周期中都是可见的。就 Servlet 而言,这可能是存储在ServletConfig.
  • @NoneScoped:具有此范围的对象在任何 JSF 页面中均不可见。在配置文件中使用时,它们表示应用程序中其他托管 bean 使用的托管 bean。没有范围的对象可以使用其他没有范围的对象。

对于EntityManager,这与持久性上下文相关联。它用于创建和删除持久实体实例,通过主键标识查找实体,以及查询所有实体。有关更多信息,请参阅 JPA(Java 持久性 API)规范或Hibernate

@Inject, 表示实例是可注入的。他们遵循臭名昭著的依赖注入控制反转 (IOC)的俗语。这基本上意味着,当资源(在您的情况下EntityManager entityManager需要时,JEE 容器会为您实例化资源(无需您直接通过例如构造函数等实例化它)。

我不知道是什么@DataRepository意思。以前从未见过。

我希望这可以帮助你。

于 2011-04-02T22:26:27.170 回答
1

这些术语通常与 guice 之类的依赖注入框架相关联,而不是特别与 java 相关联。

http://code.google.com/p/google-guice/wiki/Scopes描述了 guice 内置的各种范围。

默认情况下,Guice 每次提供值时都会返回一个新实例。此行为可通过范围进行配置。范围允许您重用实例:在应用程序 ( @Singleton)、会话 ( @SessionScoped) 或请求 ( @RequestScoped) 的生命周期内。Guice 包含一个 servlet 扩展,它定义了 Web 应用程序的范围。可以为其他类型的应用程序编写自定义范围。

于 2011-04-02T22:21:32.720 回答