gpt4 book ai didi

java - JSF 如何找到用@ManagedBean 注释的bean?

转载 作者:太空狗 更新时间:2023-10-29 22:33:14 24 4
gpt4 key购买 nike

据我所知,要使用@Annotations(或 C# 中的 [Attributes]),您必须引用类元数据,以便您可以询问该类是否被注释(属性化)。

我的问题是 JSF 实现如何找到所有用 @ManagedBean 注释的类?它是否扫描类路径中的所有类?或者是否有一种方法可以实际“查询”JVM 以获取带注释的类?

我问这个是因为当我将带注释的支持 bean 直接放在我的 web 项目中时,没有问题。但是我在 JAR 文件中定义的 beans(可跨项目重用)没有注册。有什么我必须告诉 MyFaces 以指示它查看哪些 JAR 文件吗?

此外,使用注释引入了许多不错的编程模式。我想知道我是否能以某种方式找到所有带注释的类...

最佳答案

My question is how does JSF implementation find all classes annotated with @ManagedBean? Does it scan all of the classes in the class path? Or is there a way to actually "query" the JVM for the annotated classes?

首先浏览 com.sun.faces.application.annotation.AnnotationManager Mojarra来源。请注意,这不是 API 的一部分,而是特定于实现的。

如果您打算在自己的项目中使用此类工具,我建议使用 Reflections为此而不是在家里种植它。

Set<Class<?>> classes = reflections.getTypesAnnotatedWith(SomeAnnotation.class);

在 Java EE 环境中,更好的做法是改用 CDI。


I'm asking this because when I put my annotated backing beans in my web project directly, there's no problem. But the beans that I define in the JAR files (to be reusable across projects) are not registered. Is there something that I have to tell MyFaces to direct it which JAR files to look at?

要让 JSF 从 JAR 文件加载任何带注释的托管 bean,您必须将 /META-INF/faces-config.xml JAR 文件中的文件。只是一个 JSF 2.0 兼容 <faces-config>声明足以让 JSF 扫描 JAR 文件以查找任何有趣的注释类。如果/META-INF/faces-config.xml文件不存在于 JAR 文件中,则 JSF 将不会扫描 JAR 文件以提高加载性能。

这是最低 JSF 2.0 兼容的方式 faces-config.xml文件看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
</faces-config>

将其存储在 META-INF 中JAR 的文件夹。

这是JSF 2.0 specification的第11.4.2章中描述的方式.

11.4.2 Application Startup Behavior

...

This algorithm provides considerable flexibility for developers that are assembling the components of a JSF-based webapplication. For example, an application might include one or more custom UIComponent implementations, along withassociated Renderers, so it can declare them in an application resource named “/WEB-INF/faces-config.xml”with no need to programmatically register them with Application instance. In addition, the application might chooseto include a component library (packaged as a JAR file) that includes a “META-INF/faces-config.xml” resource.The existence of this resource causes components, renderers, and other JSF implementation classes that are stored in thislibrary JAR file to be automatically registered, with no action required by the application.

另见:

关于java - JSF 如何找到用@ManagedBean 注释的bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3717376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com