我现在正在学习Java EE 7 教程中的 CDI 范围,并发现在最后一段中它说
使用会话、应用程序或对话范围的 Bean 必须是可序列化的,但使用请求范围的 Bean 不必是可序列化的。
但让我很困惑的是,在我的 IDE(Netbeans 和 IntelliJ Idea)中,当我使用 @SessionScoped 或 @ConversationScoped 时,如果我没有像 Java EE 7 教程中所说的那样实现可序列化,它确实会给我一个错误,显然,我无法构建该项目然后运行它。当我使用 @ApplicationScoped 但没有实现 Serialized 时,事情变得很奇怪,没有错误出现,我可以正常构建然后运行应用程序。
所以我对此很好奇,也很想知道为什么。您能解释一下那里发生了什么吗?太感谢了!
我有一个 DisplayNameDemo.java 文件,如下所示
显示名称演示程序
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
@DisplayName("A special test case")
public class DisplayNameDemo {
@Test
@DisplayName("Custom test name containing spaces")
void testWithDisplayNameContainingSpaces() {
}
@Test
@DisplayName("?°?°??")
void testWithDisplayNameContainingSpecialCharacters() {
}
@Test
@DisplayName(" ")
void testWithDisplayNameContainingEmoji() {
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将它编译为 .class 文件使用
javac -cp .:junit-platform-console-standalone-1.0.0.jar DisplayNameDemo.java
Run Code Online (Sandbox Code Playgroud)
这个命令执行成功?我得到了一个 DisplayNameDemo.class 文件。
之后,我运行了如下所示的命令
java -jar junit-platform-console-standalone-1.0.0.jar --select-class DisplayNameDemo.class
Run Code Online (Sandbox Code Playgroud)
但它失败了并说“org.junit.platform.commons.util.PreconditionViolationException:无法加载名称为:DisplayNameDemo.class的类”
请帮帮我,非常感谢!