Aware

  • Spring은 Aware라는 인터페이스를 제공한다.

  • Aware 인터페이스를 구현하는 객체 인스턴스를 생성하면 특정 클래스에 대한 참조가 함께 제공된다.

  • 특정 클래스에 대한 참조를 얻어 타입 캐스팅하거나 메서드를 호출하는 등 직접 여러 기능을 사용할 수 있다.

  • 하지만 이 방식을 사용하면 스프링 컨텍스트와 강하게 결합된 코드가 되며 IoC를 따르지 않기 때문에 일반적으로는 사용하지 않는 것이 좋다고 한다.

  • Aware를 구현하는 대신 Autowire하여 참조를 얻는 것이 더 권장된다. (생성자 주입 / Setter 주입 / 필드 주입)

  • Aware의 종류는 아래와 같다.

NameInjected DependencyExplained in…​

ApplicationContextAware

Declaring ApplicationContext.

ApplicationEventPublisherAware

Event publisher of the enclosing ApplicationContext.

BeanClassLoaderAware

Class loader used to load the bean classes.

BeanFactoryAware

Declaring BeanFactory.

BeanNameAware

Name of the declaring bean.

LoadTimeWeaverAware

Defined weaver for processing class definition at load time.

MessageSourceAware

Configured strategy for resolving messages (with support for parameterization and internationalization).

NotificationPublisherAware

Spring JMX notification publisher.

ResourceLoaderAware

Configured loader for low-level access to resources.

ServletConfigAware

Current ServletConfig the container runs in. Valid only in a web-aware Spring ApplicationContext.

ServletContextAware

Current ServletContext the container runs in. Valid only in a web-aware Spring ApplicationContext.

사용 사례

  • ApplicationEventPublisherAware를 사용하여 eventPublisher 참조를 MongoIndexedSessionRepository 객체에 주입할 수 있다. (3.2.1 버전 기준)

public class MongoIndexedSessionRepository
		implements FindByIndexNameSessionRepository<MongoSession>, ApplicationEventPublisherAware, InitializingBean {

	// ...

	private ApplicationEventPublisher eventPublisher;

	@Override
	public void setApplicationEventPublisher(ApplicationEventPublisher eventPublisher) {
		this.eventPublisher = eventPublisher;
	}

	// ...

}

Last updated