cdi - 如果我的对象是由生产者方法生成的,它的初始化方法会被自动调用吗?

标签 cdi jsr299

我有一个生产者方法,可以创建(比方说)Person 的实例。

此方法创建的实例属于 PersonBean 类型,并且很明显实现了 Person

该类中有一个初始化方法:

@Inject
public void setSomething(final Something something) {
  // whatever
}

bean 存档中的类路径上还有一个 Something 实现,它应该是此处注入(inject)的候选者。

我观察到这个实现被注入(inject)到另一个非生产者方法生成的对象的适当注释的字段中,所以我知道 Weld 正在找到它,它是有效的,等等。

(对我来说)规范并不清楚我的生产者方法的返回值是否也会应用 Weld/容器提供的依赖注入(inject)。

我确实观察到这个初始化方法不会自动调用。

归根结底,我的问题是:如果我正在生成一个对象,那么这是否意味着我的生成器方法必须处理该对象的所有初始化,或者(我所期望的)我的生产者方法负责实例化吗?

最佳答案

if I am producing an object, then does that mean my producer method must take care of all initialization of that object, or (what I'd expect instead) is my producer method only responsible for instantiation?

From the spec:

3.3. Producer methods
    A producer method acts as a source of objects to be injected, where:
    - the objects to be injected are not required to be instances of beans, 

这应该回答您的问题:如果您要实例化一个新对象(使用new),您将必须负责初始化。

(生产者方法的一个可能更常见的用例是在特定范围内配置和生成现有 bean...)

关于cdi - 如果我的对象是由生产者方法生成的,它的初始化方法会被自动调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10920455/

相关文章:

java - Spring 能否理解 @Inject 将 Weld 替换为 JSR-299 实现?

java - 如何使用 CDI 从外部库注入(inject) bean?

java - 未调用带有@Named @ViewScoped 的@PostConstruct 拦截器

google-app-engine - CDI/Weld 无法执行 RESTEasy 资源的构造函数注入(inject)

jakarta-ee - JPA 不能用于在 HttpSession 中管理的 CDI 范围?

java - 具有子类运行时类型的火灾事件

jakarta-ee - 为什么 @SessionsScoped EJB 会在所有用户之间共享?

jakarta-ee - 在哪里使用 EJB 3.1 和 CDI?

java - 为什么使用@PostConstruct?