Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

288
Views
¿Cuál es el alcance predeterminado para un bean creado por un método @Produces sin una anotación de alcance?

Tengo un método con una anotación @Produces que crea un archivo Apple .

Cuando lo uso con @ApplicationScoped así

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

entonces Apple se crea solo una vez para toda la aplicación.

Cuando lo uso con @RequestScoped así

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

luego se crea para cada solicitud.

Pero, ¿y si no especifico un alcance?

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

¿Con qué frecuencia se creará Apple? Sospecho en cada acceso, ¿es correcto? ¿Hay documentación sobre esto?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Es @Dependiente .

De acuerdo con "2.4.4. Alcance predeterminado " de la especificación CDI (1.2) :

Cuando no se declara explícitamente ningún alcance anotando la clase de bean o el método o campo del productor, el alcance de un bean se establece por defecto.

El ámbito predeterminado para un bean que no declara explícitamente un ámbito depende de sus estereotipos declarados:

• Si el bean no declara ningún estereotipo con un ámbito predeterminado declarado, el ámbito predeterminado para el bean es @Dependent.

• Si todos los estereotipos declarados por el bean que tienen algún ámbito predeterminado declarado tienen el mismo ámbito predeterminado, entonces ese ámbito es el ámbito predeterminado para el frijol.

• Si hay dos estereotipos diferentes declarados por el bean que declaran diferentes ámbitos predeterminados, entonces no hay un ámbito predeterminado y el bean debe declarar explícitamente un ámbito. Si no declara explícitamente un ámbito, el contenedor detecta automáticamente el problema y lo trata como un error de definición.

Si un bean declara explícitamente un ámbito, se ignoran los ámbitos predeterminados declarados por estereotipos.

over 4 years ago · Santiago Trujillo Report

0

Como no define ningún Scope, su bean producido será @Dependent por defecto.

Significa que el ciclo de vida del bean producido será el ciclo de vida del bean en el que se inyecta (contiene @Inject ).

Así que si tienes el siguiente productor:

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

Si inyecta una manzana en un @ApplicationScoped Pie Bean:

 @ApplicationScoped public class Pie { @Inject private Apple apple; }

Luego, el bean de Apple será @ApplicationScoped , por lo que se creará solo una vez.

Si Pie bean es @RequestScoped , Apple bean se creará en cada solicitud.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!