목록Spring (16)
charminseok

추상화란? 추상화란 하위 시스템의 공통점을 뽑아내서 분리시키는 것을 말합니다. 그렇게 하면 하위 시스템이 어떤 것인지 알지 못해도, 또는 하위 시스템이 바뀌더라도 일관된 방법으로 접근할 수가 있습니다. 추상화를 하려면, IoC/DI를 이용해 서비스 추상화를 용이하게 할 수 있습니다. applicationContext.xml을 통해 서비스 추상화를 구현합니다. 이때 중요한 것은 높은 응집도와 낮은 결합도를 준수하는 것입니다. 이것이 핵심입니다. 출처: https://happygrammer.tistory.com/61 [happygrammer] 스프링이 리소스는 java.net.URL을 추상화 한 것. java.net.URL를 org.springframework.core.io.Resource로 감싸서 low ..

MessageSource는 i18n(국제화) 기능을 제공하는 인터페이스로 ApplicationContext가 기본으로 제공한다. getMessage() 스프링 부트에서 설정없이 message.properties를 사용할 수 있다. ex) messageSource.getMessage("", new String []{""}, Locale.KOREA); 릴로딩 기능 @Bean public MessageSource messageSource(){ var messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename("classpath:/messages"); ... return messageSource; }

Property : 애플리케이션에 등록되는 (key, value) 쌍으로 제공되는 프로퍼티에 접근할 수 있는 기능(계층형으로 접근 -> 우선순위가 있다.) 다양한 방법으로 정의할 수 있는 설정값 Environment의 역할은 프로퍼티 소스 변경 및 프로퍼티 값 가져오기 프로퍼티 우선순위

@Profile("") 프로파일 : 각각의 환경에 따라 다른 빈을 사용하는 경우. 특정 환경에서 어떤 빈을 등록해야 하는 경우.(개발서버, 테스트서버, 실제 어플리케이션에서 사용하는 것...등등) 프로파일을 설정하지 않아도 default 프로파일에 적용된다. 프로파일 정의하기 클래스 : @Component @Profile(""), @Configuration @Profile("") 메소드 : @Bean @Profile("") 프로파일 설정하기 -Dspring.profile.active="test,A,B,...." Profile expression : !(not), &(and), |(or)
스프링은 모든 빈을 singleton으로 생성해 관리하는데, singleton은 IoC 컨테이너에 오직 하나의 객체만 존재하는 것을 의미한다. prototype은 매번 새로운 인스턴스를 만들어 사용하는 scope. 프로토타입 빈이 싱글톤 빈을 참조하면 싱글톤 빈은 언제 불러와도 같은 인스턴스라 문제가 없다. 하지만 싱글톤 빈에서 프로토타입 빈을 참조하면 프로토타입 빈이 동일한 인스턴스를 불러온다. 그렇기때문에 이런 문제를 해결하기위해 Proxy를 사용한다. 싱글톤 빈이 프로토타입 빈을 직접 참조하지않고 Proxy를 사용하기때문에 프로토타입 빈이 매번 다른 인스턴스가 사용된다. 참고:Core Technologies (spring.io)1.5. Bean Scopes
@Component 어노테이션을 사용해 빈 클래스에서 빈을 직접 등록할 수 있다. ComponentScan의 주요사항 두가지 : 스캔 위치 설정, filter(어떤 어노테이션을 스캔할지 정하는 것) 컴포넌트에는 @Repository, @Service, @Controller이 있다. @Component 어노테이션을 사용할 수도 있지만 좀더 적절한 상황에서 위의 3가지의 어노테이션을 사용하면 좋다.Core Technologies (spring.io) 1.10.1. @Component and Further Stereotype Annotations
@Autowired 어노테이션은 각 상황에 필요한 의존 객체의 타입에 맞는 빈을 찾아 주입해준다. 빈을 직접 xml 또는 Java Class에 설정해야 했지만, @Autowired 어노테이션을 사용해 의존성을 쉽게 주입받을 수 있다. setter에서 Bean으로 등록되지 않는 개체를 사용해도 실행될 수 있게 하려면 required가 false가 되게 한다. @Autowired의 required Default값은 true로 '의존성 주입이 반드시 필요한 대상'을 나타낸다. 같은 타입의 빈이 여러개일 경우 A라는 Repository를 인터페이스로 만들고 그에 관한 클래스를 여러개 만들었을때 A를 Bean으로 등록하려면, 여러개의 type이 존재하기 때문에 오류가 생길 수 있다. 이런 경우 @Primary 어..
1. 스프링 IoC 컨테이너와 빈 Inversion of Controll(IoC) : 의존 관계 주입. 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 의존성을 주입 받아서 사용하는 방법. 스프링 IoC 컨테이너 BeanFactory 애플리케이션 컴포넌트의 중앙 저장소 빈 설정 소스로 부터 빈 정의를 읽어들이고, 빈을 구성하고 제공한다. Bean : 스프링 IoC 컨테이너가 관리하는 자바 객체(ApplicationContext.getBean()으로 얻을 수 있는 객체) 장점 -> 의존성 관리, 스코프(항상 같은 객체를 생성하는 싱글톤, 매번 다른 객체를 생성하는 프로토타입), 라이프 사이클 관리 용이. 스프링 IoC 컨테이너의 역할: 빈 인스턴스 생성, 의존 관계 설정, 빈 제공 빈 설..