下面是在web应用程序启动之前执行一些任务的代码(我使用的是glassfish4):
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.servlet.ServletContextEvent;
/**
*
* @author Ernestas Gruodis
*/
@Startup
@Singleton
public class ServerInit {
/**
* Do some code execution before web application starts up.
*/
@PostConstruct
public void init() {
System.out.println("Initialising");
}
/**
* Do some code execution on web application exit.
* @param sce the servlet context event.
*/
@PreDestroy
public void destroy(ServletContextEvent sce) {
}
}
但在启动过程中,我会收到以下警告:
Weld-000411:观察者方法[BakedAnnotatedMethod]私有org.glassfish.jersey.gf.cdi.internal.cdIcomponentProvider.ProcessAnnotatedType(@Observes ProcessAnnotatedType)接收所有带注释类型的事件。考虑使用@WithAnnotations或带边界的泛型类型限制事件。
这些警告是由GlassFish中的隐式CDI扫描引起的。通过定义一个beans.xml
文件来解决这个问题,在该文件中将bean-discovery-mode
设置为none
。例如,在Maven项目中,将beans.xml
放在src/main/resources/meta-inf/
下,您的beans.xml
文件可能如下所示:
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="none">
</beans>
这将关闭对整个应用程序的扫描,因此请确保在需要的地方正确地进行注释。您还可以使用asadmin
命令更改GlassFish的全局设置,以禁用对所有应用程序的扫描:
asadmin set configs.config.server-config.cdi-service.enable-implicit-cdi=false
关于这方面的更多信息,我建议阅读GitHub中glassfish问题队列中的Enable and disable per JAR隐式扫描。
问题内容: 以下两个签名是否相同? 和 问题答案: 不,两个签名不相同。根据Java语言规范的第8章: 如果两个方法具有相同的名称和参数类型,则它们具有相同的签名。 如果满足以下所有条件,则两个方法或构造函数声明M和N具有相同的参数类型: 它们具有相同数量的形式参数(可能为零) 它们具有相同数量的类型参数 (可能为零) … 由于两种方法共享的类型参数数量不同,因此签名也不相同。 在实际情况下,使用
问题内容: 我不明白为什么在尝试执行以下操作时会收到警告(未经检查的演员表): 我的意思是将castedMap发布到外部代码的危险是什么?两种操作均可在运行时完美运行: 使用SomeType类型的键从castedMap获取元素 使用SomeType类型的键将元素放入castedMap中。 我只是使用@SuppressWarnings(“ unchecked”)取消警告。 问题答案: 答案可能很无聊
问题内容: 我有一些数据存储在Java元素中,我需要以给定的格式JSONObject返回它。虽然我的实现工作正常,但是我仍然从eclipse收到警告消息(版本:Juno Service Release 2): “ 类型安全性:put(Object,Object)方法属于原始类型HashMap。对通用类型HashMap的引用应参数化 ” 这是我的代码: 有问题的行是: 除了添加之外,还有其他方法可以
我的一个朋友在Java API中发现了这条新闻(https://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html), 通过阅读以下文章https://docs.oracle.com/javase/tutorial/java/generics/genTypes.html我可以理解前面提到的这一行在语法上意味着什么,但从给出的示例中,我无法找出
问题内容: 我的一个朋友在Java API(https://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html)中找到了这个窍门, 并通过阅读以下文章https://docs.oracle.com/javase/tutorial/java/generics/genTypes.html我可以理解上述行在语法上的含义,但是从给出的示例中我无法弄清
问题内容: 我想将jackson json库用于通用方法,如下所示: … 现在的问题是,当我调用位于请求对象内的getMyObject()时,杰克逊将嵌套的自定义对象作为LinkedHashMap返回。有什么方法可以指定需要返回T对象吗?例如:如果我发送了类型为Customer的对象,则应该从该List?中返回Customer。 问题答案: 这是Java类型擦除的一个众所周知的问题:T只是一个类型