Spring 3 и JSR-330 @Inject и @Named пример

Spring 3 и JSR-330 @Inject и @Named пример

Начиная с Spring 3.0, Spring поддерживает стандартныеJSR 330: Dependency Injection for Java. В приложении Spring 3 вы можете использовать стандартные

  1. @Inject вместо@Autowired Spring для внедрения bean-компонента.

  2. @Named вместо@Component Spring для объявления bean-компонента.

Эти стандартные аннотации JSR-330 сканируются и извлекаются так же, как и аннотации Spring, интеграция только что произошла автоматически, до тех пор, пока следующий jar в вашем classpath.

pom.xml

    
        javax.inject
        javax.inject
        1
    

1. Весенние аннотации

Давайте посмотрим на обычный пример аннотации Spring -@Autowired и@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 Аннотации

В принципе, он работает одинаково, только с разными аннотациями -@Inject и@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. Запустить его

Для работы аннотаций Spring и JSR330 необходимо сканирование компонентов.

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

    }
}

Выше двух примеров генерируются одинаковые выходные данные

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

4. Ограничения JSR-330

Есть некоторые ограничения на JSR-330, если сравнивать с Spring:

  1. @Inject не имеет атрибута «required», чтобы гарантировать успешное внедрение bean-компонента.

  2. В контейнере Spring JSR-330 по умолчанию имеет одноэлементную область видимости, но вы можете использовать Spring@Scope для определения других.

  3. Нет эквивалента Spring@Value,@Required или@Lazy.

Посмотрите этоSpring references.

5. Перейти на JSR-330

На самом деле, аннотации Spring более мощные, но доступны только в среде Spring. JSR-330 является стандартной спецификацией и поддерживается во всех средах J2ee, которые соответствуют спецификации JSR-330.

Для нового проекта или проекта миграции всегда рекомендуется использовать аннотации JSR-330, и помните, что он работает и в Spring 3.

Скачать исходный код

Скачать -Spring-JSR330-Example.zip (27kb)