CDI(Contexts and Dependency Injection)是Java EE的一个规范,用于管理应用程序的上下文和依赖注入。在CDI中,可以使用注解来标记需要注入的依赖,并由CDI容器负责实例化和管理这些依赖。
在CDI中,注入单实例是有效的,因为CDI容器会在应用程序启动时创建这些单实例,并在整个应用程序的生命周期中共享它们。这样可以确保在应用程序的不同部分中使用相同的实例,避免了重复创建和管理的开销。
然而,注入Instance<>无效的原因是因为Instance<>是一个泛型接口,用于表示一组具有相同类型的实例。在CDI中,Instance<>的注入是延迟加载的,即在需要使用实例时才会进行实例化。这意味着每次使用Instance<>时,CDI容器都会创建一个新的实例,而不是共享同一个实例。
这种设计是为了满足某些特定场景下的需求,例如需要动态获取一组实例的情况。延迟加载的特性使得Instance<>可以在运行时根据需要创建新的实例,而不是事先创建好所有实例。然而,由于Instance<>的注入是延迟加载的,所以无法像注入单实例那样共享同一个实例。
总结起来,CDI中注入单实例有效是因为CDI容器会在应用程序启动时创建并共享这些实例,而注入Instance<>无效是因为Instance<>的注入是延迟加载的,每次使用时都会创建新的实例。
领取专属 10元无门槛券
手把手带您无忧上云