Programming/Spring

Spring (3) - Container에 객체(Bean) 설정하기4 : Java

코딩하는 포메라니안 2022. 4. 23. 16:17

xml파일 없이, 완전한 Annotation은 Java를 통해 구현할 수 있다.

 

 

1. 등록할 객체에 Annotation 작성하기

 

아래 글에서 2. Annotation 작성하기 를 따라 작성하면 된다.

2022.04.23 - [웹프로그래밍/Spring] - Spring (3) - Container에 객체(Bean) 설정하기3 : Annotation

 

Spring (3) - Container에 객체(Bean) 설정하기3 : Annotation

0. Annotation 1. Stereotype Annotation Stereotype Annotation은 Bean을 등록할 때 사용할 수 있는 annotation이다. Stereotype 적용 대상 @Controller MVC Controller에 사용 @Service Service 계층 @Repositor..

yerinpy73.tistory.com

 

 

 

2. 설정 파일 생성하기

 

패키지 안에 작성하지 않아도 되지만, 다른 파일과 구분하고 싶어서 패키지를 만들어 작성하였다.

이름은 ApplicationConfig.java로 만들어주었다.

 

 

여기서 Configuration 파일이라는 의미로 @Configuration을 붙여주고,

Annotation을 스캔해서 객체를 등록하라는 의미로 @ComponentScan을 붙여준다.

아래처럼 여러 곳을 스캔하도록 할 수 있지만, 이 프로젝트에서는 하나만 설정해주면 되므로 다르게 쓸 것이다.

 

@ComponentScan(basePackages = {"com.test.di1", "com.test.di2"})

 

스캔할 곳을 하나만 설정할 때는 문자열 하나로 작성하면 된다.

//ApplicationConfig.java
package com.test.di1.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.test.di1")
public class ApplicationConfig {
	//나중에 DB와 같은 다른 설정을 작성
}

 

 

 

3. Container에서 객체 받아와서 사용하기

 

앞서 한 xml, annotation의 main과 달리, 객체를 불러올 때 java class를 설정 파일로 하기 위해 AnnotationConfigApplicationContext를 생성하고 java class를 인자로 넘겨주었다.

package com.test.di1;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.test.di1.config.ApplicationConfig;

public class TestMain {

	public static void main(String[] args) {
		//Java파일을 설정파일로 넘겨준다.
		ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);
		
		System.out.println("********");
		TestService testService1 = context.getBean("ts", TestService.class);
		TestService testService2 = context.getBean("ts", TestService.class);
		testService1.TestPrint();
		System.out.println("ts1 : "+testService1.hashCode() + " == ts2 : "+testService2.hashCode());
	}
}