Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

293
Vistas
What's the default scope for a bean created by a @Produces method without a scope annotation?

I've got a method with a @Produces annotation that creates an Apple.

When I use it with @ApplicationScoped like this

public class AppleProducer {
    @ApplicationScoped
    @Produces
    public Apple createApple() {
        return new Apple();
    }
}

then the Apple gets created only once for the whole application.

When I use it with @RequestScoped like this

public class AppleProducer {
    @RequestScoped
    @Produces
    public Apple createApple() {
        return new Apple();
    }
}

then it gets created for every request.

But what if I do not specify a scope?

public class AppleProducer {
    @Produces
    public Apple createApple() {
        return new Apple();
    }
}

How often will the Apple be created? I suspect on every access, is it correct? Is there documentation about this?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

It's @Dependent.

According to "2.4.4. Default scope" from the CDI (1.2) specification:

When no scope is explicitly declared by annotating the bean class or producer method or field the scope of a bean is defaulted.

The default scope for a bean which does not explicitly declare a scope depends upon its declared stereotypes:

• If the bean does not declare any stereotype with a declared default scope, the default scope for the bean is @Dependent.

• If all stereotypes declared by the bean that have some declared default scope have the same default scope, then that scope is the default scope for the bean.

• If there are two different stereotypes declared by the bean that declare different default scopes, then there is no default scope and the bean must explicitly declare a scope. If it does not explicitly declare a scope, the container automatically detects the problem and treats it as a definition error.

If a bean explicitly declares a scope, any default scopes declared by stereotypes are ignored.

over 4 years ago · Santiago Trujillo Denunciar

0

As you do not define any Scope, your produced bean will be @Dependent by defaut.

It means that lifecycle of the produced bean will be the lifecycle of the bean which in which it is injected (contains the @Inject).

So if you have the following producer :

public class AppleProducer {
    @Produces
    public Apple createApple() {
        return new Apple();
    }
}

If you Inject an Apple in an @ApplicationScoped Pie Bean :

@ApplicationScoped
public class Pie {

    @Inject
    private Apple apple;
}

Then the Apple bean will be @ApplicationScoped, so created just one time.

If Pie bean is @RequestScoped then the Apple bean will be created at each request.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda