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

Пример областей применения весенних бобов

– Пример областей применения весенних бобов

Автор оригинала: mkyong.

В Spring область действия компонента используется для определения того, какой тип экземпляра компонента должен быть возвращен из контейнера Spring обратно вызывающему объекту.

поддерживается 5 типов областей действия компонентов:

  1. одноэлементный – Возвращает один экземпляр компонента на контейнер Spring IoC
  2. прототип – Возвращает новый экземпляр компонента каждый раз при запросе
  3. запрос – Возвращает один экземпляр компонента для каждого HTTP-запроса. *
  4. сеанс – Возвращает один экземпляр компонента за сеанс HTTP. *
  5. globalSession – Возвращает один экземпляр компонента за глобальный сеанс HTTP. *

В большинстве случаев вы можете иметь дело только с основной областью действия Spring – синглтоном и прототипом, а область по умолчанию – синглтон.

P.S * означает действительный только в контексте веб-приложения Spring с поддержкой Context

Синглтон против прототипа

Вот пример, чтобы показать вам, в чем разница между областью действия компонента: одноэлементный и прототип .

package com.mkyong.customer.services;

public class CustomerService 
{
	String message;
	
	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
}

1. Одноэлементный пример

Если в файле конфигурации компонента не указана область действия компонента, по умолчанию используется значение singleton.



       
		

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

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 custA = (CustomerService)context.getBean("customerService");
    	custA.setMessage("Message by custA");
    	System.out.println("Message : " + custA.getMessage());
    	
    	//retrieve it again
    	CustomerService custB = (CustomerService)context.getBean("customerService");
    	System.out.println("Message : " + custB.getMessage());
    }
}

Выход

Message : Message by custA
Message : Message by custA

Поскольку компонент “Служба поддержки клиентов” находится в singletonscope, при втором извлечении с помощью “CUSTB” также будет отображаться сообщение, отправленное “CUSTA”, даже если оно извлекается с помощью нового метода getBean(). В синглтоне только один экземпляр на контейнер Spring IoC, независимо от того, сколько раз вы извлекаете его с помощью getBean(), он всегда будет возвращать один и тот же экземпляр.

2. Пример прототипа

Если вам нужен новый экземпляр компонента “Обслуживание клиентов”, каждый раз, когда вы его вызываете, используйте вместо него прототип.



   
		

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

Message : Message by custA
Message : null

В области прототипа у вас будет новый экземпляр для каждого вызываемого метода getBean() .

3. Аннотация областей применения бобов

Вы также можете использовать аннотации для определения области действия компонента.

package com.mkyong.customer.services;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

@Service
@Scope("prototype")
public class CustomerService 
{
	String message;
	
	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
}

Включить автоматическое сканирование компонентов



       
		

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

Ссылка

  1. Ссылка

Оригинал: “https://mkyong.com/spring/spring-bean-scopes-examples/”