스프링 컨테이너는 Bean들의 생명주기를 관리한다.
또한 어플리케이션을 구성하는 모든 Bean들을 관리하기 위해 IoC를 사용한다.
스프링 컨테이너의 종류에는 BeanFactory와 이를 상속한 ApplicationContext가 있다.
이 두개의 컨테이너로 의존성 주입된 빈들을 제어하고 관리할 수 있다.
@Component 어노테이션을 이용하면 Bean Configuration 파일에 Bean을 따로 등록하지 않아도 사용할 수 있다.
빈 등록자체를 빈 클래스 자체에다가 할 수 있다는 의미이다.
@Component 어노테이션은 기본적으로 타입기반의 자동주입 어노테이션이다.
package com.example.springioc;
import java.util.Base64;
import org.springframework.stereotype.Component;
// spring -> 객체관리요청
@Component
public class Base64Encoder implements IEncoder{
public String encode(String message) {
return Base64.getEncoder().encodeToString(message.getBytes());
}
}
프로젝트경로
Base64Encoder.java
package com.company.ioc;
import java.util.Base64;
//public class Base64Encoder {
//
// public String encode(String message) {
// return Base64.getEncoder().encodeToString(message.getBytes());
//
// }
//}
public class Base64Encoder implements IEncoder{
public String encode(String message) {
return Base64.getEncoder().encodeToString(message.getBytes());
}
}
UrlEncoder.java
package com.company.ioc;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
//public class UrlEncoder {
//
// public String encode(String message) {
// try {
// return URLEncoder.encode(message, "UTF-8");
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// return null;
// }
// }
//}
public class UrlEncoder implements IEncoder{
public String encode(String message) {
try {
return URLEncoder.encode(message, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
}
package com.company.ioc;
public interface IEncoder {
String encode(String message);
}
package com.company.ioc;
public class Encoder {
private IEncoder iEncoder;
// 간단히 설정된 Encoder
//생성자
// public Encoder() {
// //this.iEncoder = new Base64Encoder();
// this.iEncoder = new UrlEncoder();
// }
public Encoder(IEncoder iEncoder) {
//this.iEncoder = new Base64Encoder();
// this.iEncoder = new UrlEncoder();
this.iEncoder = iEncoder;
}
public String encode(String message) {
return iEncoder.encode(message);
}
}
package com.company.ioc;
public class Main {
public static void main(String[] args) {
String url = "www.naver.com/books/it?page=10&size=20&name=spring-boot";
// Base 64 encoding
//Base64Encoder encoder = new Base64Encoder();
IEncoder encoder = new Base64Encoder();
String result = encoder.encode(url);
System.out.println("Base64 Encoder : " + result);
// URL encoding
// UrlEncoder urlencoder = new UrlEncoder();
IEncoder urlencoder = new UrlEncoder();
String Urlresult = urlencoder.encode(url);
System.out.println("UrlEncoder : " + Urlresult);
// 간단한 설정 Encoder
//Encoder encoder2 = new Encoder();
//String result2 = encoder2.encode(url);
//System.out.println("설정된 Encoder : " + result2);
// DI - 주입 Encoder
//Encoder encoder2 = new Encoder(new Base64Encoder());
Encoder encoder2 = new Encoder(new UrlEncoder());
String result2 = encoder2.encode(url);
System.out.println("DI Encoder : " + result2);
}
}
refenrence
https://velog.io/@jaepani5015/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88
https://programmingrecoding.tistory.com/13