ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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;
        }
    }

     

     

     

Designed by Tistory.