我是java,jsf,jsp的新手,我需要快速了解它是如何工作的。所以我用来练习的网站有一些术语等,我不知道它们是什么意思,我希望有人可以解释它们的含义以及它们的用途和用途:)
Requestscoped
Applicationscoped
Sessionscoped
EntityManager
并且有人可以告诉我这些线路的作用吗?
@RequestScoped
public class Dao {
@DataRepository
@Inject
private EntityManager entityManager;
答案 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应用程序的范围。可以为其他类型的应用程序编写自定义范围。