일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Today
- Total
- docker
- 싱글톤 컨테이너
- Servlet Filter
- autowired
- 생성자 주입
- 라즈베리파이
- 객체지향
- 롬복 Qualifier
- RequiredArgsConstructor
- 스프링 빈 조회
- 스프링
- beandefinition
- 빈 중복 오류
- ComponentScan
- DI컨테이너
- Spring
- 라즈베리파이4
- DI
- 스프링 컨테이너
- Spring interceptor
- springsecurity
- 도커
- 스프링 싱글톤
- qualifier
- UsernamePasswordAuthenticationFilter
- HandlerMethodArgumentResolver
- 스프링 Configuration
- Autowired 옵션
- 스프링 빈
- 의존관계 주입
목록Spring (6)
그날그날 공부기록

231126 쿠키, 세션 회원의 로그인 정보를 유지시켜야 하는 상황. 홈 → 로그인 → 메인 페이지 이동(홈) 우선 쿠키에 사용자 정보를 보관해 보자. 다음은 로그인 컨트롤러의 login 메서드이다. @PostMapping("/login") public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletResponse response) { if (bindingResult.hasErrors()) { return "login/loginForm"; } Member loginMember = loginService.login(form.getLoginId(), form.getPassword()); if..
@Qualifier(”빈 이름")을 통해 필드와 빈을 매칭 할 수 있다. 하지만 컴파일시 타입이 체크되지 않는다. 이 경우 직접 @Qualifier(”빈 이름")을 포함하는 애노테이션을 직접 만들어 사용하면 해결할 수 있다. 자바 인터페이스 파일을 생성하여 @를 붙여주거나 클래스 파일을 하나 생성하여 public class → public @interface로 바꿔준다. @Qualifier를 대체할 애노테이션을 만들어야 하므로 ⌘ + O 단축키로 @Qualifier를 검색하여 원래 있던 애노테이션을 복사하여 추가한다. 그 후 기존에 @Qualifier(”빈 이름")으로 매칭해주었던 애노테이션을 추가해준다. 최종 코드는 다음과 같다. //@Qualifier에 있던 애노테이션 시작 @Target({Eleme..

@Configuration public class AppConfig { @Bean public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService(){ return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy(){ return new FixD..

스프링 컨테이너 생성 과정 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라고 한다.(정확히는 BeanFactory와 ApplicationContext로 구분) ApplicationContext는 인터페이스이고, 애노테이션에 기반하여 설정 클래스를 생성했기 때문에 AnnotationConfigApplicationContext라는 구현체를 사용한다. 스프링이 생성되는 과정은 다음과 같다. 하지만 생성자를 호출하며 의존관계 설정도 한번에 이루어지기 때문에 개념적인 단계라고 한다. 스프링 컨테이너 생성 new AnnotationConf..

스프링의 원리를 이해하기 위해 스프링을 사용하지 않고 자바로 구현해보았다. public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository = new MemoryMemberRepository(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); @Override public Order createOrder(Long memberId, String itemName, int item..
스프링이란? 스프링 DI 컨테이너 기술 스프링 프레임워크 스프링 부트, 스프링 프레임워크 등을 포함한 스프링 생태계 다형성 인터페이스를 구현한 객체의 인스턴스를 실행 시점에 유연하게 변경할 수 있다. 클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경할 수 있다. → 역할과 구현을 분리한다 유연하고 변경에 용이 확장 가능한 설계 클라이언트에 영향을 주지 않는 변경 ⭐️인터페이스를 안정적으로 설계해야 한다 → 인터페이스가 무너지면 모두 무용지물 스프링과 객체지향 다형성이 가장 중요 → 스프링은 다형성을 극대화 할 수 있도록 지원 스프링의 제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원