Spring Framework는 개발자 대신 직접 객체인 스프링 빈을 관리하고(제어의 역전), 클래스들간의 의존 관계가 맺어지는 것을 도와준다(의존성 주입).
PostService
가 PostRepository
를 의존(사용)하는 경우
@Service
public class PostService {
private final PostRepository postRepository = new PostRepository();
public void test() {
postRepository.findById(1L);
}
}
@Autowired
를 통해 객체를 주입받아 의존성을 만든다.@Repository
public class PostRepository {
}
@Service
public class PostService {
private final PostRepository postRepository;
@Autowired
public PostService(PostRepository postRepository) {
this.postRepository = postRepository;
}
}
field 주입
@Service
public class PostService {
@Autowired
private final PostRepository postRepository;
}
setter 주입
@Service
public class PostService {
private final PostRepository postRepository;
public PostService() {
}
@Autowired
public void setPostRepository(PostRepository postRepository) {
this.postRepository = postRepository;
}
}
constructor 주입 → 권장
@Autowired
는 생략 가능하다.@Transactional
어노테이션Connection connection = dataSource.getConnection();
public sendMoney() {
try (connection) {
connection.setAutoCommit(false);
// business logic
connection.commit();
} catch (SQLException e) {
connection.rollback();
}
}
@Transactional
public sendMoney() {
// business logic
}
메서드 실행시간 재기
모든 메서드의 시작과 끝에 시간, 로깅 관련 코드를 삽입해주어야하지만 별도의 애너테이션으로 분리하여 각 메서드가 중복 코드 없이 핵심 로직만을 가지고 할 수 있다.
doGet()
, doPost()
대신 @GettMapping
, @PostMapping
을 통해 요청을 처리한다.commit()
, rollback()
을 명시적으로 호출하지 않아도 어노테이션을 붙이면 트랜잭션 처리가 이루어진다.@Cacheable