Spring 3 et exemple JSR-330 @Inject et @Named

Spring 3 et JSR-330 @Inject et @Named exemple

Depuis Spring 3.0, Spring prend en charge lesJSR 330: Dependency Injection for Java standard. Dans l'application Spring 3, vous pouvez utiliser la norme

  1. @Inject au lieu des@Autowired de Spring pour injecter un bean.

  2. @Named au lieu des@Component de Spring pour déclarer un bean.

Ces annotations standard JSR-330 sont analysées et récupérées de la même manière que les annotations Spring, l'intégration vient de se produire automatiquement, tant que le pot suivant dans votre chemin de classe.

pom.xml

    
        javax.inject
        javax.inject
        1
    

1. Annotations de printemps

Voyons un exemple d'annotation Spring normal -@Autowired et@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. Annotations JSR-330

Fondamentalement, cela fonctionne de la même manière, juste avec des annotations différentes -@Inject et@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. Exécuter

Les annotations Spring et JSR330 nécessitent une analyse des composants pour fonctionner.

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();

    }
}

Au-dessus de deux exemples sont générés la même sortie

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

4. Limitations du JSR-330

Il y a quelques limitations sur JSR-330 par rapport à Spring:

  1. @Inject n'a pas d'attribut «required» pour s'assurer que le bean est injecté avec succès.

  2. Dans le conteneur Spring, JSR-330 a un singleton de portée par défaut, mais vous pouvez utiliser les@Scope de Spring pour en définir d'autres.

  3. Aucun équivalent aux@Value,@Required ou@Lazy de Spring.

Découvrez ceSpring references.

5. Optez pour JSR-330

En fait, les annotations de Spring sont plus puissantes, mais uniquement disponibles sur le framework Spring. Le JSR-330 est une spécification standard, et il est pris en charge sur tous les environnements J2ee qui suivent la spécification JSR-330.

Pour les nouveaux projets ou les projets de migration, il est toujours recommandé d'utiliser les annotations JSR-330, et n'oubliez pas, cela fonctionne également sur Spring 3.

Télécharger le code source

Téléchargez-le -Spring-JSR330-Example.zip (27kb)