.java术语和随机词澄清

时间:2011-04-02 21:52:28

标签: java entitymanager

我是java,jsf,jsp的新手,我需要快速了解它是如何工作的。所以我用来练习的网站有一些术语等,我不知道它们是什么意思,我希望有人可以解释它们的含义以及它们的用途和用途:)

Requestscoped
Applicationscoped
Sessionscoped
EntityManager

并且有人可以告诉我这些线路的作用吗?

@RequestScoped
public class Dao {

    @DataRepository
    @Inject
    private EntityManager entityManager;

2 个答案:

答案 0 :(得分:2)

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

  

注释提供有关a的数据   程序不属于   程序本身。他们没有直接   效果对代码的操作   他们注释。

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

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

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

@Inject表示该实例是可注入的。他们遵循 Depency Injection Inversion of Control(IOC)这个臭名昭着的词汇。这基本上意味着,当需要资源(在您的情况下为EntityManager entityManager时),JEE容器为您实例化资源(无需您通过构造函数等直接实例化它)。

我不清楚@DataRepository的含义。从未见过它。

我希望这会对你有所帮助。

答案 1 :(得分:1)

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

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

  

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