首先,在 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
意思。以前从未见过。
我希望这可以帮助你。