본문 바로가기

Spring

spring core(핵심) 기능

1) Dependency Injection (DI) 기능

 

사용할 객체를 소스코드에서 직접 생성하지 않는다.

 

직접 생성의 예) StudentService studentService = new StudentService();

 

스프링 엔진이 생성하여 넣어 준다(inject).

) @Autowired StudentService studentService;

 

이 기능이 좋은(핵심인) 이유.

프로젝트가 커지면, 수정할(유지보수할)일이 점점 많아진다.

 

처음에는 StudentService 클래스를 구현해서 잘 사용했는데,

요구사항이 변해서, StudentService 클래스를 상속해서,

StudentService2 클래스를 새로 구현하였다.

 

)

class StudentService2 extends StudentService {

  @Oveerride

  public method1(...) { ... }

}

 

직접 생성하는 코드의 경우, 클래스 이름을 수정해야 한다.

StudentService studentService = new StudentService2();

이렇게 수정하는 것이, 프로젝트가 커지면 문제가 된다.

 

 

@Autowired StudentService studentService;

이 경우에는 수정하지 않아도 된다.

단 현재 프로젝트에 StudentService2 클래스, StudentService3 클래스 등이 있다면

이들이 모두 StudentSerivce의 자식 클래스라면,

어떤 클래스 객체를 생성하여 대입할지(autowired 할지) 설정해 주어야 한다.

 

설정 방법1) xml 설정 파일 (spring 3)

설정 방법2) java config 클래스 구현.

 


 

2) AOP 기능 Aspect Oriented Programming

 

예를 들어,

메소드 앞 뒤로 log 메시지를 찍는 코드를 추가하고 싶은데,

메소드 앞 뒤로 begin transaction, commit 코드를 추가하고 싶은데,

소스 코드 수정 없이 추가할 수 잇는가?

 

설정만 바꿔서, 메소드 앞뒤에 소스코드를 자동으로 넣어주는 기능. AOP

 

 

@Transactional(...)

메소드에 위 어노테이션을 추가하면

그 메소드 앞에 begin tran, 끝에 commit이 자동 추가된다.

 


'Spring' 카테고리의 다른 글

@Setter  (0) 2019.04.18
토비의 스프링3.1 - 템플릿 메소드 패턴, 팩토리 메소드 패턴  (0) 2019.03.03
Spring Security + Spring MVC  (0) 2019.02.04
Spring Security  (0) 2019.02.03
ModelAttribute  (0) 2019.01.30