Рубрики
Без рубрики

Компоненты автоматического сканирования пружины

– Пружинные компоненты автоматического сканирования

Обычно вы объявляете все компоненты или компоненты в файле конфигурации компонентов XML, чтобы Spring container мог обнаруживать и регистрировать ваши компоненты или компоненты. На самом деле, Spring может автоматически сканировать, обнаруживать и создавать экземпляры ваших компонентов из предварительно определенного пакета проекта, без более утомительного объявления компонентов в XML-файле.

Ниже приведен простой весенний проект, включающий в себя уровень обслуживания клиентов и dao. Давайте рассмотрим различия между объявлением компонентов вручную и автоматическим сканированием компонентов весной.

1. Объявляет Компоненты Вручную

Посмотрите обычный способ объявить боб весной.

Обычная фасоль.

package com.mkyong.customer.dao;

public class CustomerDAO 
{
	@Override
	public String toString() {
		return "Hello , This is CustomerDAO";
	}	
}

Слой ДАО.

package com.mkyong.customer.services;

import com.mkyong.customer.dao.CustomerDAO;

public class CustomerService 
{
	CustomerDAO customerDAO;

	public void setCustomerDAO(CustomerDAO customerDAO) {
		this.customerDAO = customerDAO;
	}

	@Override
	public String toString() {
		return "CustomerService [customerDAO=" + customerDAO + "]";
	}
		
}

Файл конфигурации компонента (Spring-Customer.xml), нормальная конфигурация бобов весной.


	
	
		
	

	


Запустите его

package com.mkyong.common;

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

import com.mkyong.customer.services.CustomerService;

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

    	CustomerService cust = (CustomerService)context.getBean("customerService");
    	System.out.println(cust);
    	
    }
}

выход

CustomerService [customerDAO=Hello , This is CustomerDAO]

2. Автоматическое Сканирование Компонентов

Теперь включите функции автоматического сканирования компонентов Spring.

Добавьте @Component , чтобы указать, что этот класс является компонентом автоматического сканирования.

package com.mkyong.customer.dao;

import org.springframework.stereotype.Component;

@Component
public class CustomerDAO 
{
	@Override
	public String toString() {
		return "Hello , This is CustomerDAO";
	}	
}

Слой DAO, добавьте @Компонент , чтобы указать, что это также компонент автоматического сканирования.

package com.mkyong.customer.services;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.mkyong.customer.dao.CustomerDAO;

@Component
public class CustomerService 
{
	@Autowired
	CustomerDAO customerDAO;

	@Override
	public String toString() {
		return "CustomerService [customerDAO=" + customerDAO + "]";
	}
}

Поместите этот ” контекст: компонент ” в файл конфигурации компонента, это означает, что весной включите функцию автоматического сканирования. базовый пакет указывает, где хранятся ваши компоненты, Spring просканирует эту папку, найдет компонент (с аннотацией @Component) и зарегистрирует его в контейнере Spring.



	


Запустите его

package com.mkyong.common;

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

import com.mkyong.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");
    	System.out.println(cust);
    	
    }
}

выход

CustomerService [customerDAO=Hello , This is CustomerDAO]

Именно так работает сканирование автокомпонентов весной.

Пользовательское имя компонента автоматического сканирования

По умолчанию Spring будет использовать нижний регистр первого символа компонента – от “CustomerService” до “CustomerService”. И вы можете получить этот компонент с именем “Служба поддержки клиентов”.

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

Чтобы создать пользовательское имя для компонента, вы можете указать пользовательское имя следующим образом:

@Service("AAA")
public class CustomerService 
...

Теперь вы можете получить его с этим именем “AAA”.

	CustomerService cust = (CustomerService)context.getBean("AAA");

Типы аннотаций Сканирования Автокомпонентов

В Spring 2.5 существует 4 типа типов аннотаций для сканирования автокомпонентов

  • @Компонент – Указывает компонент автоматического сканирования.
  • @Репозиторий – Указывает компонент DAO на уровне сохраняемости.
  • @Service – Указывает компонент службы на бизнес-уровне.
  • @Контроллер – Указывает компонент контроллера на уровне представления.

Итак, какой из них использовать? Это действительно не имеет значения. Давайте посмотрим исходный код @Репозитория , @Сервис или @Контроллер .

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {

	String value() default "";

}

Вы заметите, что все @Репозиторий , @Service или @Контроллер помечены @Компонентом . Итак, можем ли мы использовать только @Component для всех компонентов для автоматического сканирования? Да, вы можете, и Spring автоматически просканирует все ваши компоненты с аннотацией @Component.

Это работает нормально, но не является хорошей практикой, для удобства чтения вы всегда должны объявлять @Repository,@Service или @Controller для определенного уровня, чтобы сделать ваш код более удобным для чтения, как показано ниже:

Слой DAO

package com.mkyong.customer.dao;

import org.springframework.stereotype.Repository;

@Repository
public class CustomerDAO 
{
	@Override
	public String toString() {
		return "Hello , This is CustomerDAO";
	}	
}

Уровень обслуживания

package com.mkyong.customer.services;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.mkyong.customer.dao.CustomerDAO;

@Service
public class CustomerService 
{
	@Autowired
	CustomerDAO customerDAO;

	@Override
	public String toString() {
		return "CustomerService [customerDAO=" + customerDAO + "]";
	}
		
}

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

Оригинал: “https://mkyong.com/spring/spring-auto-scanning-components/”