소개
게시글
질문&답변
2022.12.25
WebSecurityConfigurerAdapter deprecated
api 앞에 "/" 빠져서 그런거 아닌가요?
- 0
- 3
- 2K
질문&답변
2022.07.15
JpaRepository를 이용할시 에러가 발생합니다.
안되는 부분 설명에 내용이 꼬인것 같아서 다시 정리해서 질문드립니다 !! 우선, [ 현재 상황 ] 1) JpaRepository를 상속받음으로써 Repsitory에 대한 Bean에 넣어줌 2) ComponentScan을 이용한 AutoAppConfig 으로 자동으로 Component 붙은 클래스들을 Bean에 넣어줌 3) 이때 Filter를 통해 Configuration.class 는 읽지 못하게 해놨습니다. [ 에러 상황 ] 1) org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberController': Unsatisfied dependency expressed through field 'memberService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImp' defined in file [/Users/parksungjun/Desktop/창업동아리/ShoppingMall/out/production/classes/xik/ShoppingMall/Service/MemberServiceImp.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'xik.ShoppingMall.Repository.MemberRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 위의 에러 로그를 보면 " Repository에 MemberRepository 유형의 빈이 없으며, Autowired할 수 있는 빈이 최소 하나 필요하다 " 라는 내용으로 보입니다. 즉, JpaRepository를 통해 빈이 자동생성되는 줄 알았는데 안되고 있다는 의미이죠. 일주일 째 이유를 찾아보고, 강의를 몇번이고 돌려보고 있는데 이유를 못찾겠네요... 그래서 소스 코드를 다시 올리겠습니다. 1) 컨트롤러 @Controller public class MemberController { @Autowired private MemberServiceInterface memberService ; @GetMapping ( "/login" ) public String Login () { return "/Login/login" ; } @GetMapping ( "/new" ) public String New () { return "/Login/memberNew" ; } @PostMapping ( "/new" ) public String create (MemberForm form) { Member member = new Member() ; member.setName(form.getName()) ; member.setPhoneNumber(form.getPhoneNumber()) ; memberService .join(member) ; // redirect:/ 하면 홈화면으로 보내는 것이다 . return "redirect:/5xik" ; } @GetMapping ( "/members" ) public String list (Model model) { List members = memberService .findMember() ; model.addAttribute( "members" , members) ; return "/Login/memberCheck" ; } } 2) MemberService @Transactional @Component public class MemberServiceImp implements MemberServiceInterface{ private MemberRepository memberRepository ; // 외부에서 리포지토리를 넣어줄 수 있게끔 직접 nw 하는게 아닌 생성자를 이용해서 만들어준다 . @Autowired public MemberServiceImp (MemberRepository memberRepository) { this . memberRepository = memberRepository ; } // 회원가입 @Override public Long join (Member member) { // 휴대폰 번호 중복 체크 validateDuplicateMember(member) ; memberRepository .save(member) ; return member.getId() ; } @Override public void validateDuplicateMember (Member member) { Optional result = memberRepository .findByphonenumber(member.getPhoneNumber()) ; result.ifPresent(m ->{ throw new IllegalStateException( " 이미 가입된 휴대폰 번호입니다 ." ) ; }) ; } @Override public List findMember () { return memberRepository .findall() ; } @Override public Optional findOne (Long memberId) { return memberRepository .findByid(memberId) ; } } 3) OrderService @Transactional @Component public class OrderServiceImp implements OrderService { private final MemberRepository memberRepository ; private final DiscountPolicy discountPolicy ; @Autowired public OrderServiceImp (MemberRepository memberRepository , DiscountPolicy discountPolicy) { this . memberRepository = memberRepository ; this . discountPolicy = discountPolicy ; } @Override public Order createOrder (Long MemberId , Integer price) { Member member = memberRepository .findByid(MemberId).get() ; int discountPrice = discountPolicy .discount(member , price) ; return new Order(MemberId , discountPrice) ; } } 4) Repository public interface SpringDataJpaMemberRepository extends JpaRepository , Long> , MemberRepository { @Override Optional findByname (String name) ; } 5) 빈 조회 테스트 코드 public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoSpringConfig. class ) ; @Test @DisplayName ( " 모든 빈 출력하기 " ) void findBean () { String[] beanDefinitionName = ac .getBeanDefinitionNames() ; for (String i : beanDefinitionName) { Object bean = ac .getBean(i) ; System. out .println( "name = " + i + "object" + bean) ; } } @Test @DisplayName ( "application 빈 출력하기 " ) void findApplication () { String[] beanDefinitionName = ac .getBeanDefinitionNames() ; for (String i : beanDefinitionName) { BeanDefinition beanDefinition = ac .getBeanDefinition(i) ; if (beanDefinition.getRole() == BeanDefinition. ROLE_APPLICATION ) { Object bean = ac .getBean(i) ; System. out .println( "name = " + i + "object" + bean) ; } } } } 6) AutoSpringConfig ( IoC컨테이너 ) @Configuration @ComponentScan ( excludeFilters = @Filter (type = FilterType. ANNOTATION , classes = Configuration . class )) public class AutoSpringConfig { }
- 0
- 4
- 2.4K
질문&답변
2022.03.10
메모리 데이터 조회 예제를 해보고 있는데 폼 데이터를 하나 더 추가하니 조회가 안됩니다.
말씀해주신 부분 수정 후 정상동작 확인했습니다. David 님 감사합니다. (사진)
- 0
- 2
- 173