-
01. 의존성 주입 (DI)멋사 부트캠프/SpringFramework 2025. 5. 16. 13:25
1. 의존성 주입 방식
1) 에너테이션 방식
Spring은 MVC 아키텍처를 따르며, @Autowired와 같은 애너테이션을 통해 의존성 주입을 수행한다.
각각의 애너테이션(아래 예시)을 Spring 컨테이너 (= ApplicationContext)가 관리한다. @Controller public class PersonController { private PersonService service; private PersonConsoleView view; private Scanner sc = new Scanner(System.in); @Autowired public PersonController(PersonService service, PersonConsoleView view) { this.service = service; this.view = view; } ..... } @Repository (=DAO) public class PersonDaoSample implements PersonDao { @Autowired private JdbcTemplate jdbcTemplate; ... } @Service public class PersonServiceSample implements PersonService{ @Autowired private PersonDao dao; ... } @Configuration @ComponentScan(basePackages = "com.person") @PropertySource("classpath:db.properties") public class AppConfig { // DB 정보 객체 생성 @Bean public DataSource dataSource(Environment env) { DriverManagerDataSource db_mgr = new DriverManagerDataSource(); db_mgr.setDriverClassName(env.getProperty("driver")); db_mgr.setUrl(env.getProperty("url")); db_mgr.setUsername(env.getProperty("user")); db_mgr.setPassword(env.getProperty("password")); return db_mgr; } // DB 커넥션 객체 생성 @Bean public JdbcTemplate jdbcTemplate (DataSource dataSource) { return new JdbcTemplate(dataSource); } } @Component public class PersonConsoleView { ... }
2. 기존 방식과 의존성 주입 방식의 차이점
//기존 방식 import ***.DieselEngine; public class Car { private Engine engine = new DieselEngine(); // 여기서 타입이 고정됨 } //의존성 주입 방식 @Component public DieselEngine{ ...... } @Component public class Car { private final Engine engine; @Autowired public Car(Engine engine) { this.engine = engine; } }