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