티스토리 뷰

정리 노트/Spring

@Bean

eyoadgkn 2024. 4. 29. 14:57
@Bean
@Bean어노테이션은 Spring 프레임워크에서 사용되는 어노테이션으로, 메서드 레벨에 적용되어 해당 메서드가 반환하는 객체를 Spring 컨테이너에 등록하는 역할을 합니다.이를 통해 개발자가 직접 객체를 생성하고 관리할 수 있습니다.

why

의존성 관리: 애플리케이션에 필요한 객체를 직접 생성하고 관리할 수 있어, 객체 간의 의존성을 효과적으로 관리할 수 있습니다.

유연성: 객체 생성 방식을 직접 제어할 수 있어, 복잡한 객체 생성 로직을 캡슐화할 수 있습니다.

테스트 용이성: 테스트 시 @Bean 메서드를 오버라이드하여 mock 객체를 주입할 수 있어, 단위 테스트를 더욱 쉽게 작성할 수 있습니다.

@Configuration
public class AppConfig {
    // 이 클래스는 Spring의 @Configuration 어노테이션을 사용하여 구성 클래스임을 나타냅니다.
    // 이 클래스에서는 Spring Bean을 정의하고 있습니다.
    
    @Bean
    public DataSource dataSource() {
        // dataSource() 메서드는 DataSource 타입의 Bean을 반환합니다.
        // 이 메서드에서는 BasicDataSource 객체를 생성하고 필요한 설정을 합니다.
        // 데이터베이스 드라이버 클래스, URL, 사용자명, 비밀번호 등을 설정합니다.
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
        dataSource.setUsername("myuser");
        dataSource.setPassword("mypassword");
        return dataSource;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        // jdbcTemplate() 메서드는 JdbcTemplate 타입의 Bean을 반환합니다.
        // 이 메서드에서는 dataSource 매개변수로 받은 DataSource 객체를 사용하여 JdbcTemplate 객체를 생성합니다.
        return new JdbcTemplate(dataSource);
    }

    @Bean
    public UserService userService(JdbcTemplate jdbcTemplate) {
        // userService() 메서드는 UserService 타입의 Bean을 반환합니다.
        // 이 메서드에서는 jdbcTemplate 매개변수로 받은 JdbcTemplate 객체를 사용하여 UserServiceImpl 객체를 생성합니다.
        return new UserServiceImpl(jdbcTemplate);
    }
}

 

Spring의 구성 클래스인 AppConfig를 정의하고 있습니다.
이 클래스에서는 DataSource, JdbcTemplate, UserService 타입의 Bean을 정의하고 있습니다.
dataSource() 메서드에서는 BasicDataSource 객체를 생성하고 필요한 데이터베이스 연결 정보를 설정합니다. jdbcTemplate() 메서드에서는 dataSource 객체를 사용하여 JdbcTemplate 객체를 생성합니다.
마지막으로 userService() 메서드에서는 JdbcTemplate 객체를 사용하여 UserServiceImpl 객체를 생성합니다.
이와 같이 AppConfig 클래스에서는 Spring 애플리케이션에 필요한 핵심 구성 요소들을 정의하고 있습니다.

'정리 노트 > Spring' 카테고리의 다른 글

자주 사용하는 Lombok의 어노테이션 정리  (0) 2024.05.23
WebMvcConfigurer  (0) 2024.05.01
@ResponseBody  (0) 2024.04.26
Spring Project[Project]  (0) 2024.02.28
SQL2  (0) 2024.02.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함