Spring 3 und JSR-330 @Inject und @Named Beispiel

Beispiel für Spring 3 und JSR-330 @Inject und @Named

Seit Spring 3.0 unterstützt Spring die StandardJSR 330: Dependency Injection for Java. In der Spring 3-Anwendung können Sie Standard verwenden

  1. @Inject anstelle von@Autowired von Spring, um eine Bohne zu injizieren.

  2. @Named anstelle von@Component von Spring, um eine Bohne zu deklarieren.

Diese JSR-330-Standardanmerkungen werden wie Spring-Annotationen gescannt und abgerufen. Die Integration erfolgt nur automatisch, solange sich die folgende JAR in Ihrem Klassenpfad befindet.

pom.xml

    
        javax.inject
        javax.inject
        1
    

1. Frühlings-Anmerkungen

Sehen Sie sich ein normales Annotationsbeispiel für Spring an -@Autowired und@Component

P.S @Component, @Repository and @Service are same, just declares a bean in Spring Ioc context.

CustomerDAO.java

package com.example.customer.dao;

import org.springframework.stereotype.Repository;

@Repository
public class CustomerDAO
{
    public void save() {
        System.out.println("CustomerDAO save method...");
    }
}

CustomerService.java

package com.example.customer.services;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.customer.dao.CustomerDAO;

@Service
public class CustomerService
{
    @Autowired
    CustomerDAO customerDAO;

    public void save() {

        System.out.println("CustomerService save method...");
        customerDAO.save();

    }

}

2. JSR-330 Anmerkungen

Grundsätzlich funktioniert es gleich, nur mit unterschiedlichen Anmerkungen -@Inject und@Named.

CustomerDAO.java

package com.example.customer.dao;

import javax.inject.Named;

@Named
public class CustomerDAO
{

    public void save() {
        System.out.println("CustomerDAO save method...");
    }
}

CustomerService.java

package com.example.customer.services;

import javax.inject.Inject;
import javax.inject.Named;

import com.example.customer.dao.CustomerDAO;

@Named
public class CustomerService
{
    @Inject
    CustomerDAO customerDAO;

    public void save() {

        System.out.println("CustomerService save method...");
        customerDAO.save();

    }

}

3. Starte es

Sowohl Spring- als auch JSR330-Annotationen benötigen einen Komponentenscan, um zu funktionieren.

Spring-AutoScan.xml – Scan bean automatically



    

App.java – Run it

package com.example;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.example.customer.services.CustomerService;

public class App
{
    public static void main( String[] args )
    {
        ApplicationContext context =
            new ClassPathXmlApplicationContext(new String[] {"Spring-AutoScan.xml"});

        CustomerService cust = (CustomerService)context.getBean("customerService");
        cust.save();

    }
}

Über zwei Beispielen wird die gleiche Ausgabe generiert

CustomerService save method...
CustomerDAO save method...

4. JSR-330-Einschränkungen

Es gibt einige Einschränkungen für JSR-330 im Vergleich zu Spring:

  1. @Inject hat kein Attribut "required", um sicherzustellen, dass die Bean erfolgreich injiziert wird.

  2. Im Spring-Container verfügt JSR-330 standardmäßig über einen Bereichs-Singleton. Sie können jedoch die@Scopevon Spring verwenden, um andere zu definieren.

  3. Kein Äquivalent zu@Value,@Required oder@Lazy von Spring.

Schauen Sie sich dieseSpring references an.

5. Fahren Sie zur JSR-330

Tatsächlich sind die Anmerkungen von Spring leistungsfähiger, jedoch nur im Spring-Framework verfügbar. Der JSR-330 ist eine Standardspezifikation und wird in allen J2ee-Umgebungen unterstützt, die der JSR-330-Spezifikation folgen.

Für Neu- oder Migrationsprojekte wird immer empfohlen, JSR-330-Anmerkungen zu verwenden, und denken Sie daran, dass dies auch für Spring 3 funktioniert.

Quellcode herunterladen

Laden Sie es herunter -Spring-JSR330-Example.zip (27kb)