728x90
의존 주입은
1) new를 직접 수행해서 바로 사용 (강한 결합)
2) 미리 만들어진 객체를 할당받아서 사용 => DI 의존성 주입 (약한 결합)
- 객체를 생성해주며 라이프사이클(생명주기)을 관리하고 의존 주입을 해준다 == 컨테이너 -> IoC
유지보수 용이 == 낮은 결합도, 높은 응집도
[의존 주입 방법]
1) .xml
2) 자바 코드 작성
3) @
@을 이용한 의존 주입 예시 1
각각의 예시 클래스들은 미리 작성해 둠
package com.kim.springboot.test;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration // 스프링 컨테이너의 설정 파일 역할
public class Config {
// 설정 파일
@Bean // 객체화 공식
public Leader leaderA() {
// Setter 주입
Leader leader1 = new Leader();
leader1.setName("티모");
leader1.setMember(new MemberA());
return leader1;
}
@Bean(name="kim")
public Leader leaderB() {
return new Leader("아리",new MemberA());
}
@Bean
public MemberA memberA() {
return new MemberA();
}
@Bean
public MemberB memberB() {
return new MemberB();
}
}
위의 설정 파일을 사용하는 메인 클래스
(@SpringBootApplication 사용 안 함)
package com.kim.springboot;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Configuration;
import com.kim.springboot.test.Config;
import com.kim.springboot.test.Leader;
import com.kim.springboot.test.Member;
//@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
// SpringApplication.run(TestApplication.class, args);
// 1. IoC 제공해줄 스프링 컨테이너 생성하기
ApplicationContext ac = new AnnotationConfigApplicationContext(Config.class);
// 싱글톤으로 객체 생성 및 관리됨
// 2. @Bean 등록한 객체 사용해보기
Leader leader1 = (Leader) ac.getBean("leaderA");
leader1.hello();
// @Configuration으로 해당 파일이 설정파일이라는것을 인식 생성되어 있는 클래스들을 Config파일에 설정
// -> @Bean으로 컨테이너에 의해 각 클래스들 객체화
// -> Config 설정 파일에서 설정한 내용들이 ac에 주입
// -> ac에서 객체화된 leaderA를 가져와 leader1에 주입
Leader leader2 = (Leader) ac.getBean("kim");
leader2.hello();
//
Member member = ac.getBean("memberB",Member.class);
member.hello("main에서 작성");
//
}
}
ApplicationContext ac = new AnnotationConfigApplicationContext(???);
=> 디자인 패턴 중 하나의 예시
=====================================================================================
예시 2 설정 파일 대신 실행될 컨트롤러
package com.kim.springboot.test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@Autowired
Leader leader1;
@Autowired
Leader leader2;
@Autowired
@Qualifier("memberB")
Member member;
@RequestMapping("/")
public @ResponseBody String root() {
leader1.hello();
leader1.setMember(member);
leader1.hello();
if(leader1 == leader2) {
System.out.println("동일한 객체입니다.");
}
else {
System.out.println("동일하지 않습니다.");
}
return "루트(표지) 페이지";
}
}
@SpringBootApplication 사용
package com.kim.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Test02Application {
public static void main(String[] args) {
SpringApplication.run(Test02Application.class, args); // 내장된 톰캣 실행
// 1. main 메서드 실행
// 2. @SpringBootApplication의 영향으로 @ 스캔 및 등록
// 3. 10번 라인에 의해 내장 톰캣 실행
// 4. ApplicationContext 생성 == 스프링 컨테이너 실행
// -> URL로 요청 입력시 RequestMapping에 의해 작성한 메서드가 호출되는 방식
}
}
- @SpringBootApplication
Bean(객체)들을 생성할 때, 싱글톤을 유지할 수 있도록 설정 및 관리
각각의 객체들이 생성되면 용이한 순간을 추측하여 메모리를 관리
.jar 파일들도 생성 및 설정 관리
@ 지정된 클래스를 스캔해서 Bean 등록 관리
728x90
'Spring' 카테고리의 다른 글
스프링 부트 - MyBatis 연동 (0) | 2022.12.04 |
---|---|
스프링 부트 - Validator 검증 (0) | 2022.10.26 |
스프링 부트 설치 및 시작 (0) | 2022.10.24 |
Spring Ajax를 사용한 정렬 (1) | 2022.10.07 |
Mybatis 프레임워크 스프링 연동 (0) | 2022.10.05 |