스프링에서 Service ServiceImpl 사용하는 이유
·
WEB/Spring
스프링에서 Service 인터페이스와 ServiceImpl로 구현하는 구조를 사용한 경우를 자주 볼 수 있다.이와 같은 사용 방법은 스프링의 의존성 주입(DI)에 관련 인터페이스를 구현하는것과 연관이 깊다.Service 인터페이스와 ServiceImpl 구조로 사용하는 이유 1. 객체 간의 결합도를 낮추어 유연한 개발을 하기위함, 하나의 인터페이스를 구현 다형성을 줌으로서 하나의 인터페이스만 바라보지 않게 의존관계를 줄일 수 있다. 2. Spring의 AOP Proxy를 만들기 위함, @Transactional 어노테이션 같은 경우 인터페이스가 존재해야지만 동작할수 있기에 필요하다.(AOP는 기본적으로 Dynamic Proxy를 사용 이같은 경우 인터페이스 기반으로 동작, CGLIB를 사용할경우는 예외 ..
스프링 전역 예외처리
·
WEB/Spring
스프링에는 전역 예외처리를 해주는 방법으로 여러가지 방법을 제공한다. 그중 어노테이션으로 처리하는 방법을 알아보려고 한다. @RestControllerAdvice, @ControllerAdvice 이 두 개의 어노테이션은 같은 방식으로 에러를 처리하는 어노테이션이다 다만 두 개의 어노테이션 차이로는 @RestControllerAdvice = @ControllerAdvice + @ResponseBody 로 볼수가 있다. @ControllerAdvice란?@ExceptionHandler, @ModelAttribute, @InitBinder 가 적용된 메서드들을 AOP를 적용해 컨트롤러 단에 적용하기 위해 고안된 어노테이션이다. @RestControllerAdvice란?@RestControllerAdvice ..
자바)Reflection 사용한 동적 메소드 호출
·
WEB/Spring
메소드를 사용하고자 할때 보통 @Resource 를 통해 빈 객체를 통해 클래스의 메소드를 호출해 오거나User user = new User(); 객체를 내부에 직접 선언하여 메소드를 호출한다. 내가 사용하고자 하는 클래스와 메소드가 명확할때 위와 같이 사용을 한다.하지만 상황에 따라 사용해야하는 클래스와 메소드가 다양하면 객체를 선언하는 빈도가 많고 소스의 길이가 기하급수적으로 늘어났을 경우 동적으로 메소드를 호출하여 이와 같은 상황을 방지하고자 한다. 구현String ClassName = "kbs.class.chair"; // 사용하고자 하는 클래스의 위치(chair 라는 이름의 클래스)Class cls = Class.forName(ClassName); // 클래스이름 정의// 인자가 없을 경우..
스프링-static field에 의존성 주입하여 DAO 사용하기
·
WEB/Spring
회사에서 공통 함수로 DB를 조회하여 시퀀스를 가져오는걸 만들려고 한다.공통 함수의 경우 static 으로 선언하여 로직내에서 따로 선언 없이 가져오게 하였다.public class commUtil { private static Dao dao; // 시퀀스를 조회하여 String으로 리턴 public static String sSequence() { return dao.selectSequence(); }}위와 같이 사용하였을때 Spring Component scan 범위를 벗어나고 static 으로 선언함으로서 객체로 인정 받지 못해 실제로 실행하였을때 Nullpointerexception 으로 해당 메소드를 가져오지 못하게 된다. 이를 보완하고 static 으로 사용할수 있게 아래와..
대전집주인
'어노테이션' 태그의 글 목록