Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Android
- 낙관적락 비관적락 차이
- JPA 비관적락
- bean
- Transaction isolation level
- 스프링 log
- JPA Lock
- Inno DB
- Optimistic Lock
- JPA 동시성
- spring security 인증
- 안드로이드
- 암호화
- 스마일게이트
- JPA 낙관적락
- Pessimistic Lock
- component
- 개발
- spring security
- JPA
- 서버개발캠프
- annotation
- 서버
- Redis
- 디자인 패턴
- 캠프
- 스프링
- 스프링 로그
- flask
- spring
Archives
- Today
- Total
모르는게 많은 개발자
[Spring] XML Configuration와 Java Configuration 비교 본문
반응형
지금까지 Xml파일을 통해서 bean을 관리해오는 것을 봤다. 이제는 이 Xml을 Java코드로 바꿀 수 있는 방법을 알아보자.
1. @Configuration
JAVA config를 사용하기 위해서는 @Configuration Annotation을 사용해야 한다.
@Configuration
@ComponentScan("spring.di.ui")
public class DIConfig {
@Bean
public Exam ex() {
return new NewlecExam();
}
}
<context:component-scan base-package="spring.di.ui" />
<bean id="ex" class="spring.di.entity.NewlecExam" />
위의 코드는 XML을 자바 코드로 변경했을 때를 나타낸다. @Bean태그를 통해 bean을 생성하고 함수의 이름이 XML에서는 id가 된다.
여기서 Exam의 빈을 생성되는 동작 방식이 궁금할 수 있다.
- @Bean태그를 통해 클래스 객체를 생성하고 @Value를 통해 변수에 값이 할당한다음 IoC컨테이너에 담긴다.
public class NewlecExam implements Exam {
@Value("20")
private int kor;
@Value("40")
private int eng;
private int math;
private int com;
public NewlecExam(int kor, int eng, int math, int com) {
this.kor = kor;
this.eng = eng;
this.math = math;
this.com = com;
}
}
이것을 실행하는 main문은 다음과 같다.
public class Program {
public static void main(String[] args) {
//Annotation을 통해 Config를 정의했으므로
//AnootationConfigApplicationContext객체를 통해 DIConfig.class를 등록
ApplicationContext context =
new AnnotationConfigApplicationContext(DIConfig.class);
ExamConsole console = context.getBean(ExamConsole.class);
console.print();
}
2. @Component VS @Bean
그럼 @Component와 @Bean은 모두 객체를 생성해 IoC 컨테이너에 넣는 역할을 한다. 그럼 두 Annotation의 차이는 뭘까?
- @Component는 개발자가 직접 만든 클래스를 bean으로 등록할 때 사용.
- @Bean은 개발자가 만들지 않은 클래스 즉, 외부 라이브러리를 bean으로 등록할 때 사용.
그럼 위의 예제는 약간 잘못됬다고 볼 수 있다. 위의 예제를 고치면 다음과 같다.
@Configuration
//@Component설정한 newlecExam을 scan하기 위해 spring.di.entity 패키지 추가
@ComponentScan({"spring.di.ui", "spring.di.entity"})
public class DIConfig {
}
@Component
public class NewlecExam implements Exam {
@Value("20")
private int kor;
@Value("40")
private int eng;
private int math;
private int com;
public NewlecExam(int kor, int eng, int math, int com) {
this.kor = kor;
this.eng = eng;
this.math = math;
this.com = com;
}
}
참고
https://www.youtube.com/watch?v=XzrXZIRB1vM&list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T&index=17
반응형
'스프링' 카테고리의 다른 글
[JPA] 1. 영속성 컨텍스트(Persistence Context) 정리 (0) | 2020.08.17 |
---|---|
[Spring] Boot와JPA(Mysql)을 이용한 Rest API 간단 예제 (0) | 2020.05.07 |
[Spring] @Component를 이용한 객체 생성 방법 (0) | 2020.04.08 |
[Spring] @Autowired @Qualifier 개념/예제 (0) | 2020.04.04 |
[Spring] AppicationContext, XML Configuration 예제 (0) | 2020.04.02 |
Comments