멋사 부트캠프/SpringFramework
01. 의존성 주입 (DI)
cTosMaster
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;
}
}