java - jsf 或任何框架如何使用注释创建 bean?

标签 java jsf

<分区>

jsf 或任何框架如何使用注解创建 bean?就像我们使用 @ViewScoped 时的 jsf 一样,它为每个 View 创建 bean,或者 @RequestScoped 为每个请求创建 bean,它在内部究竟是如何工作的?

最佳答案

这是我的理解:

为了便于解释,假设我们正在尝试创建这样的框架,它能够读取注释并动态注入(inject)/创建 bean。

第一部分,我们应该有自己的注释/必须遵循任何标准注释,例如 Java Validation API JSR303

其次,我们应该在启动时读取注释,并将这些信息缓存在一些适合我们的集合中。 如果它用于 Web 应用程序,我会创建一个监听器并指示开发人员在启动应用程序时启动监听器(或启动 servlet ..很多选项) 这个类/监听器/启动 servlet 将读取所有类(也许我们可以提供一些 xml 文件,我们可以要求他们配置详细信息)/读取配置文件并读取 annotations using Java Reflection API .

目前,我们需要详细信息。 比如

MyBean 位置:com.bean 范围:请求/hotelRegister

MySecondBean 位置:com.bean 范围:Session/hotelRegister

因此对于每个请求,如果相关的 url 请求,我们必须创建 MyBean。 MySecondBean 应该在每个 session 中只创建一次。

现在创建/管理bean的生命周期。但是何时何地?

像 JSF/Spring/Struts 这样的框架过去只有一个 Web 应用程序的入口点。需要在 web.xml 中配置为启动 servlet。

假设我们有一个 Servlet (MyServlet) 需要配置为启动 Servlet。

因此,通过此 servlet 的任何请求都将通过此方法中的 doPost 或 doGet 方法。

在这些方法中,我们应该能够找到请求的资源是什么(例如说/hotelRegister 配置)。从配置中,这个 servlet 会知道他们必须创建 myBean 作为请求范围,因此使用反射它将创建 myBean 并调用该 Bean 中的 crossponding 方法。这个 servlet 维护实例生命周期。一旦请求服务了这个对象就从范围中移除(例如这个对象可以放在 HttpRequest 属性中)。

如果它被称为 session ,那么变量将保留在 session 中,你应该有 sessionListener处理bean的生命周期。

使用 Refelction we can create beans

总的来说,使用反射可以很容易地根据来自配置的信息(注释/xml 文件/任何格式)创建对象。关键是,客户端应该通过框架提供的上下文来调用/调用操作。

我可能会在非常非常高的层次上解释,但还有其他功能,如代理、AOP、缓存、初始化(DI)和框架自带的许多功能

关于java - jsf 或任何框架如何使用注释创建 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23090405/

相关文章:

jsf - 在 View 作用域托管 bean 的后构造方法中访问查询字符串参数

java - 在 JavaServer Faces 中导航,使用正确的参数进行重定向

java - JSF + Primefaces : Ajax CRUD-Actions in Master-Detail-View only work once per page-load

java - 通过 yaml 嵌套配置 - spring boot

java - 匹配两个字符串,允许一次交换

java - 在 Liferay portlet 中存储依赖项的位置

集群环境中的 Java Batch 作业

java - Spring Security 和 JSF,找不到资源/j_spring_security_check.jsp

java - 对话范围意外行为

java - Gradle 复制规范 : list contents