Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';没有范围注释的@products方法创建的bean的默认范围是什么?_Java_Jakarta Ee_Ejb_Cdi - Fatal编程技术网

Java 什么';没有范围注释的@products方法创建的bean的默认范围是什么?

Java 什么';没有范围注释的@products方法创建的bean的默认范围是什么?,java,jakarta-ee,ejb,cdi,Java,Jakarta Ee,Ejb,Cdi,我有一个带有注释的方法,可以创建一个Apple 当我将其与@ApplicationScoped一起使用时,如下所示 public class AppleProducer { @ApplicationScoped @Produces public Apple createApple() { return new Apple(); } } public class AppleProducer { @RequestScoped @Pro

我有一个带有注释的方法,可以创建一个
Apple

当我将其与
@ApplicationScoped
一起使用时,如下所示

public class AppleProducer {
    @ApplicationScoped
    @Produces
    public Apple createApple() {
        return new Apple();
    }
}
public class AppleProducer {
    @RequestScoped
    @Produces
    public Apple createApple() {
        return new Apple();
    }
}
然后整个应用程序只创建一次苹果

当我像这样将它与
@RequestScoped
一起使用时

public class AppleProducer {
    @ApplicationScoped
    @Produces
    public Apple createApple() {
        return new Apple();
    }
}
public class AppleProducer {
    @RequestScoped
    @Produces
    public Apple createApple() {
        return new Apple();
    }
}
然后为每个请求创建它

但是,如果我不指定范围怎么办

public class AppleProducer {
    @Produces
    public Apple createApple() {
        return new Apple();
    }
}
苹果多久会被创造一次?我怀疑每一次访问都有问题,对吗?有关于这方面的文档吗?

它是

根据以下来源的“”:

通过注释bean类或 生产者方法或字段bean的作用域是默认的

未显式声明作用域的bean的默认作用域 取决于其宣称的陈规定型观念:

•如果bean没有用声明的默认值声明任何原型 范围,bean的默认范围是@Dependent

•如果bean声明的所有原型都已声明 默认范围具有相同的默认范围,则该范围为 bean的默认作用域

•如果bean声明了两个不同的原型 声明不同的默认作用域,则没有默认作用域和 bean必须显式声明一个作用域。如果不明确 声明一个作用域,容器会自动检测问题并 将其视为定义错误

如果bean显式声明了一个作用域,那么 刻板印象被忽略了


由于您没有定义任何作用域,您生成的bean将由defaut依赖

这意味着生成的bean的生命周期将是它被注入的bean的生命周期(包含
@Inject

因此,如果您有以下制作人:

public class AppleProducer {
    @Produces
    public Apple createApple() {
        return new Apple();
    }
}
如果在
@ApplicationScoped
Pie
Bean中注入苹果:

@ApplicationScoped
public class Pie {

    @Inject
    private Apple apple;
}
然后,
Apple
bean将被
@ApplicationScoped
,因此只需创建一次

如果
Pie
bean是
@RequestScoped
,那么将在每个请求时创建
Apple
bean