ApplicationScoped

@ApplicationScoped
public class ApplicationScopedClass {
    //This class gets constructed once for the entire life of the application, and is shared among all CDI-managed classes throughout the life of the application.

    @Inject
    public ApplicationScopedClass(SomeDependency someDependency) {
        doSomethingWith(someDependency);
    }

    public ApplicationScopedClass() {
        //Note that it is required that an application scoped class have a public no-args constructor
    }

}

具有 @ApplicationScoped 的类只创建一次,并且依赖于该类的每个对象共享同一个实例。这些类是有效的单例,但应该注意的是,没有什么可以阻止编码人员手动创建该类的其他实例。因此,使用 @ApplicationScoped 对于在整个应用程序中共享上下文非常有用,或者作为性能优化(如果构造实例的类很昂贵),但不应该依赖它作为保证仅一个实例的完整性度量。类存在。

与请求范围的 bean 一样,应用程序范围的 bean 需要有一个公共的无参数构造函数。