분류 전체보기233 [Spring Object] TaskExcutor TaskExecutorTaskExecutor는 단순히 비동기 작업을 시행하기 위한 Interface입니다.Spring에서는 Executor 인터페이스를 구현하는 것으로 단일화 했는데요.Executor API는 의외로 간단합니다.package java.util.concurrent;public interface Executor { void execute(Runnable command);}ExecutorServiceExecutorService는 Thread의 관리 기능이 강화된 인터페이스로 shutdown()처럼 Thread에 이벤트를 일으키는 메서드를 제공합니다. ExecutorService에는 Future형 객체를 반환하는 submit() 메서드가 있습니다.Future 인스턴스는 대게 비동기 실행 T.. FrameWorks/Spring & Boot 2025. 2. 6. [Spring Object] MessageSource MessageSourceResourceBundleMessageSource는 가장 많이 쓰이는 MeessageSource 구현체로 다국어를 사용 할 때 사용합니다.alert.checkout=A shopping cart has been checked out.alert.inventory.checkout=A shopping cart with {0} has been checked out at {1} Bean 인스턴스는 반드시 messageSource라고 명명해야 컨텍스트가 알아서 감지합니다.setBasenames()로 message로 시작하는 파일들을 찾도록 설정하고 캐시주기는 1초로 설정합니다. 각 Locale별로 리소스 번들 파일을 제일 먼저 찾아가고, 파일이 없는 경우 message_en.properties.. FrameWorks/Spring & Boot 2025. 2. 6. [Spring Object] Resource ResourceSpring의 Resource객체를 활용하면 다른 정적인 파일들도 읽어 올 수 있습니다.public class BannerLoader { private Reosurce banner; public void setBanner(Resource banner) { this.banner = banner; } @PostContstruct public void showBanner() throws IOException { Files.lines(Path.get(banner.getURI()), Charset.forName("UTF-8")) .forEachOrdered(System.out::println); }} showBanner().. FrameWorks/Spring & Boot 2025. 2. 6. [Spring Object] ApplicationEvent ApplicationEvent이벤트 기반의 통신을 하려면 제일 먼저 무엇이 이루져 있어야 할까요??당연히 이벤트 자체를 정의하는 것 부터가 순서겠죠??이렇게 이벤트를 정의할 때 ApplicationEvent Class를 사용하게 됩니다.쇼핑 카트를 체크아웃하면 Casher Bean이 체크아웃 시각이 기록된 CheckoutEvent를 발행한다고 해봅시다.public class CheckoutEvent extends ApplicationEvent { private final ShoppingCart cart; private final Date time; public CheckoutEvent(ShoppingCart cart, Date time) { super(cart); .. FrameWorks/Spring & Boot 2025. 2. 3. [Spring Object] Aware AwareBean이 IoC Container와 직접적인 의존관계를 가지도록 설계하는 방법은 바람직하지 않지만, 때때로 필요할 경우가 있습니다.때문에 해당 방법을 사용하기 위해서는 Aware(인지) Interface를 구현해합니다.다음 표는 Spring에서 자주 쓰는 Aware Interface 입니다.Aware InterfaceTarget Resource TypeBeanNameAwareIoC Container에 구성한 Instance Bean NameBeanFactoryAware현재 BeanFactory, ContainerService를 호출하는데 사용ApplicationContextAware현재 ApplicationContext, ContainerService를 호출하는데 사용MessageSourceA.. FrameWorks/Spring & Boot 2025. 2. 3. [Spring Object] AbstractFactoryBean Factory를 통해 POJO를 생성한는 방법은 여러가지가 있습니다.정적 메서드를 사용인스턴스 메서드를 사용스프링 Factory Bean 사용이 중 Spring은 FactoryBean 인터페이스를 상속한 간편한 템플릿 클래스 AbstractFactoryBean을 제공합니다.우선 정적 메서드를 사용하여 POJO를 생성하는 예시부터 보겠습니다.정적 메서드로 POJO 생성하기public class ProductCreator { public static Product createProduct(String productId) { if("aaa".equals(productId)) { return enw Battery("AAA", "2.5"); } else if("c.. FrameWorks/Spring & Boot 2025. 1. 21. [Spring Object] BeanPostProcessor 빈 후처리기는 BeanPostProcessor 인터페이스를 구현한 객체입니다.BeanPostProcessor를 구현한 Bean을 발견하면 Spring은 휘하의 Bean Instance 들에게 postprocessBeforeInitailization(), postProcessAfterInitailization() 두 함수를 적용하게 되는데 빈 상태를 조사, 수정, 확인한느 등 어떤 로직도 이 메서드에 넣을 수 있습니다. 두 메서드는 하는 동작이 없더라도 반드시 원본의 Bean Instance를 반환해야 합니다. 아래 예시를 보겠습니다. @Component를 선언하여 Bean Instance를 생성하게 하였고, BeanPostProcessor 인터페이스를 구현하는 예시입니다.@Componentpublic c.. FrameWorks/Spring & Boot 2025. 1. 21. [Spring Annotation] @Profile @Profile@Profile은 우리가 각 환경에 맞게 Application Context를 설정하게 할 수 있습니다.예를 들자면, 우리는 개발환경, 테스트환경, 운영환경에 따른 서버의 정보가 다를 수 있습니다.이 경우, 우리는 환경에 따라 매번 소스코드를 수정하고 배포하고를 반복하기가 귀찮죠.이럴 때 우리는 @Profile Annotation을 사용하게 됩니다.예를 들어보겠습니다.아래의 경우에는 @Profile("global")인 경우 해당 Class를 컴파일하는 방법입니다.이 경우 다양한 방법으로 컴파일 시킬 수 있습니다.SpringBoot 환경 변수Spring Boot를 사용하는 경우application-local.propertiesapplication-global.propertiesapplicat.. FrameWorks/Spring & Boot 2025. 1. 12. [Spring Annotation] @PropertySrouce @PropertySourceSping에서 제공하는 Annotaion으로 .properties 파일의 데이터를 key=value쌍을 읽어 올 수 있습니다.specialcustomer.dicount=0.1summer.discount=0.15endofyear.discount=0.2 아래의 예시를 보겠습니다. 기본적인 application.properties의 파일 내용을 가져오지 않고, 특정 파일 discounts.properties 파일 내용을 가져 오려면 @PropertySource에 선언해서 해당 파일을 가져 오면 됩니다. @Value를 사용함으로써 해당 파일에 명시된 key=value=를 불러옵니다.@Configuration@PropertySource("classpath:discounts.propert.. FrameWorks/Spring & Boot 2025. 1. 12. [Spring Annotation] @Scope @Scope@Scope는 Bean 스코프를 지정하는 Annotation입니다.모든 Bean의 기본 스코프는 sigleton으로 설정 되어 있습니다.이를 변경하려고 할 때 아래의 스코프중 하나를 선택해서 변경할 수 있습니다.스코프설명singletonIoC 컨테이너당 빈 인스턴스 하나를 생성prototype요청할 때마다 빈 인스턴스를 새로 생성requestHTTP 요청당 빈 인스턴스 한개 생성. Web Application Context에만 해당sessionHTTP 세션당 빈 인스턴스 한개 생성. Web Application Context에만 해당globalSession전역 HTTP 세션당 빈 인스턴스 한개 생성. Potal Application Context에만 해당.예시로 두 고객이 상품을 등록하는 예시.. FrameWorks/Spring & Boot 2025. 1. 12. [Spring Annotation] @PostConstrcut, @PreDestroy @PostConstruct자바 구성(@Configuration) Class 외부에 POJO Class를 정의(@Component) 할 경우 사용합니다. @Bean(initMethod="${methodName}"와 같은 동작을 하게 됩니다.@PreDestory자바 구성(@Configuration) Class 외부에 POJO Class를 정의(@Component) 할 경우 사용합니다. @Bean(destoryMethod="${methodName}"와 같은 동작을 하게 됩니다.@Componentpublic Class Cashier { @Value("checkout") private String fileName; @Value("HOME/user/Temp/cashier") private St.. FrameWorks/Spring & Boot 2025. 1. 12. [Spring Annotation] @Lazy @Lazy기본적으로 Spring은 모든 POJO를 급하게 초기화 합니다.쉽게 말하자면 Application이 시동과 동시에 POJO를 초기화하는 것이지요.하지만, 환경에 따라 우리는 처음 요청하기 전까지 해당 과정을 미뤄야 하는 경우도 발생합니다. 그럴 경우 사용하는 개념이 느긋한 초기화인 @Lazy입니다.@Component@Scope("prototype")@Lazypublic class ShoppingCart { private List items = new ArrayList(); public void addItem(Product item) { items.add(item); } public List getItems(){ return items; }} FrameWorks/Spring & Boot 2025. 1. 12. 이전 1 2 3 4 ··· 20 다음 💲 추천 글 728x90 반응형