@New
Published: 2024-05-18 18:27:22


@Named(value = "newtuto")
@ApplicationScoped
public class _04_New {

    //üretilen
    @Produces
    public String uretilenData( @New StudentDto studentDto){
        studentDto=StudentDto.builder()
                .studentId(0L).studentName("student Adi")
                .build();
        return studentDto.getStudentName();
    }

    @Getter
    @Inject
    private String tuketilenData;
}

Bu Java kodu, CDI (Contexts and Dependency Injection) ve Lombok kütüphanesini kullanarak bir sınıf tanımlıyor. Açıklamalarıyla birlikte her bir parçanın ne işe yaradığını inceleyelim:

- `@Named(value = "newtuto")`: Bu annotation, CDI tarafından yönetilen bir bean'i tanımlar ve `newtuto` adı altında JSF (JavaServer Faces) gibi view teknolojilerinde kullanılabilir hale getirir¹⁵.
- `@ApplicationScoped`: Bu annotation, bean'in uygulama kapsamında olduğunu belirtir, yani uygulama çalıştığı sürece tek bir instance'ı olur ve tüm uygulama boyunca paylaşılır¹.

`@Produces` ve `@New` ile ilgili kısım:
- `@Produces`: Bu annotation, CDI'nin bir nesneyi üretmesi ve bağımlılık enjeksiyonu için kullanılabilir hale getirmesi gerektiğini belirtir. Bu örnekte, `uretilenData` metodu, `StudentDto` tipinde bir nesne üretir ve bu nesnenin `studentName` özelliğini döndürür⁶.
- `@New`: Bu annotation, her seferinde yeni bir `StudentDto` nesnesi üretilmesini sağlar. Yani, `uretilenData` metodu çağrıldığında her zaman yeni bir `StudentDto` nesnesi oluşturulur ve bu nesne üzerinde işlemler yapılır¹¹.

`@Getter` ve `@Inject` ile ilgili kısım:
- `@Getter`: Lombok kütüphanesinin bir parçası olan bu annotation, sınıfın `tuketilenData` adlı özel alanı için getter metodu oluşturur¹⁸.
- `@Inject`: Bu annotation, CDI tarafından yönetilen bir bağımlılığın bu sınıfa enjekte edilmesini sağlar. Yani, `tuketilenData` alanı, CDI container tarafından otomatik olarak doldurulur²².

Özetle, bu kod parçası, `newtuto` adında bir CDI bean tanımlar ve bu bean içinde `StudentDto` tipinde bir nesne üretir ve bu nesnenin ismini döndürür. Ayrıca, başka bir yerde üretilen `String` tipinde bir veriyi `tuketilenData` alanına enjekte eder. Bu yapı, özellikle enterprise Java uygulamalarında sıkça kullanılır ve bağımlılık yönetimini kolaylaştırır.

Kaynak: Bing ile konuşma, 18.05.2024
(1) java - What is javax.inject.Named annotation supposed to be used for .... https://stackoverflow.com/questions/5415261/what-is-javax-inject-named-annotation-supposed-to-be-used-for.
(2) java - What is the difference between @ApplicationScoped and @Singleton .... https://stackoverflow.com/questions/4555844/what-is-the-difference-between-applicationscoped-and-singleton-scopes-in-cdi.
(3) java - Please explain the @Produces annotation in CDI - Stack Overflow. https://stackoverflow.com/questions/16534728/please-explain-the-produces-annotation-in-cdi.
(4) Creating a Custom Annotation in Java | Baeldung. https://www.baeldung.com/java-custom-annotation.
(5) java - How can I get @getter and @setter? - Stack Overflow. https://stackoverflow.com/questions/35776356/how-can-i-get-getter-and-setter.
(6) java - What is the difference between @Inject and @Autowired in Spring .... https://stackoverflow.com/questions/7142622/what-is-the-difference-between-inject-and-autowired-in-spring-framework-which.
(7) ApplicationScoped (Java(TM) EE 7 Specification APIs) - Oracle. https://docs.oracle.com/javaee/7/api/javax/enterprise/context/ApplicationScoped.html.
(8) ApplicationScope (Spring Framework 6.1.6 API). https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/context/annotation/ApplicationScope.html.
(9) ApplicationScope (Spring Framework API) - Javadoc - Pleiades. https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/web/context/annotation/ApplicationScope.html.
(10) ApplicationScoped (Java EE 6 ) - Oracle. https://docs.oracle.com/javaee/6/api/javax/faces/bean/ApplicationScoped.html.
(11) java - How to use @produces annotation? - Stack Overflow. https://stackoverflow.com/questions/17842155/how-to-use-produces-annotation.
(12) The @Produces Annotation (The Java EE 6 Tutorial) - Oracle. https://docs.oracle.com/cd/E19798-01/821-1841/gipxf/index.html.
(13) The @Produces Annotation (The Java EE 6 Tutorial, Volume I) - Oracle. https://docs.oracle.com/cd/E19226-01/820-7627/gipxf/index.html.
(14) @Consumes and @Produces Annotation to Customize ... - Dinesh on Java. https://www.dineshonjava.com/using-consumes-and-produces-to/.
(15) Annotations Basics (The Java™ Tutorials > Learning the Java Language .... https://docs.oracle.com/javase/tutorial/java/annotations/basics.html.
(16) Declaring an Annotation Type (The Java™ Tutorials - Oracle. https://docs.oracle.com/javase/tutorial/java/annotations/declaring.html.
(17) Annotation (Java Platform SE 8 ) - Oracle. https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html.
(18) What' the purpose of @Named annotation - Stack Overflow. https://stackoverflow.com/questions/26071779/what-the-purpose-of-named-annotation.
(19) Creating Named beans with annotations (JSF 2.0) - IBM. https://www.ibm.com/docs/SSRTLW_9.6.0/com.ibm.etools.jsf.doc/topics/tcrt_facesNamed_bean_annot.html.
(20) @Getter and @Setter - Project Lombok. https://projectlombok.org/features/GetterSetter.
(21) java - Using @Getter on Classes, Enums, etc - Stack Overflow. https://stackoverflow.com/questions/54551114/using-getter-on-classes-enums-etc.
(22) What is the @Getter annotation in Lombok? - Educative. https://www.educative.io/answers/what-is-the-getter-annotation-in-lombok.
(23) Wiring in Spring: @Autowired, @Resource and @Inject | Baeldung. https://www.baeldung.com/spring-annotations-resource-inject-autowire.
(24) How to use the @Inject attribute in Java - Educative. https://www.educative.io/answers/how-to-use-the-inject-attribute-in-java.
(25) Inject (Java(TM) EE 7 Specification APIs) - Oracle. https://docs.oracle.com/javaee/7/api/javax/inject/Inject.html.
(26) undefined. http://download.oracle.com/javaee/6/api/javax/inject/Named.html.
(27) undefined. https://dzone.com/articles/java-ee6-cdi-named-components.
(28) undefined. http://www.w3.org/1999/xhtml.
(29) undefined. http://java.sun.com/jsf/html.
(30) undefined. http://java.sun.com/jsf/core.
(31) undefined. http://java.sun.com/jsf/facelets.
(32) undefined. http://www.jboss.org/jdf/quickstarts/jboss-as-quickstart/guide/GreeterQuickstart/.