Back-end/Java, Kotlin

스프링 위에 공통 클래스를 만들기

philo0407 2021. 3. 7. 13:52

우선 싱글톤 패턴을 직접 만들어서 스프링 클래스 위에 올리려고 하였으나...

 

계속 mapper를 주입받지 못하기 때문에 

 

스프링의 IoC 컨테이너에 올려주는 것으로 전략을 바꾸었다.

 

 

1. 초기 버전 -- mapper 주입 안됨 (아마 static이라서 그런것으로 보인다...)

 

@Component
public class VoUtil {
	
	private VoUtil() { }
	
	// 싱글턴
	private static class LazyHolder {
		
		public static final VoUtil INSTANCE = new VoUtil();
		
		public final static void setProperty(BoardMapper _mapper) {
			mapper = _mapper;
		}
	}
	
	public static VoUtil getInstance(BoardMapper _mapper) {
		System.out.println("VoUtil mapper: " +_mapper);
		LazyHolder.setProperty(_mapper);
		return LazyHolder.INSTANCE;
	}
	
	public static VoUtil getInstance() {
		return LazyHolder.INSTANCE;
	}
	
	public BoardMapper returnMapper() {
		return mapper;
	}
    
    ...
    
    public 메서드  () { ... }
}

구현부

 

		if(!existMapper) {
			VoUtil.getInstance(mapper);
			existMapper = true;
		}

호출부에서도 이렇게 처리해야 한다... (existMapper는 플래그변수)

 

 

2.  싱글턴 방식으로 객체 주입

 

@Component
public class VoUtil {
	
//	private VoUtil() { }
	
	@Inject
	public BoardMapper mapper;
	
    ...
}

.....와 확실히 스프링의 방식을 쓰는 것이 간결하다. ㅠㅠ