tjdwns45375701
@tjdwns45375701
Reviews Written
-
Average Rating
-
Posts
Q&A
WebSecurityConfigurerAdapter deprecated
api ์์ "/" ๋น ์ ธ์ ๊ทธ๋ฐ๊ฑฐ ์๋๊ฐ์?
- 0
- 4
- 2.4K
Q&A
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) ์ปจํธ๋กค๋ฌ @Controllerpublic 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@Componentpublic 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@Componentpublic 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
- 4.5K
Q&A
๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์กฐํ ์์ ๋ฅผ ํด๋ณด๊ณ ์๋๋ฐ ํผ ๋ฐ์ดํฐ๋ฅผ ํ๋ ๋ ์ถ๊ฐํ๋ ์กฐํ๊ฐ ์๋ฉ๋๋ค.
๋ง์ํด์ฃผ์ ๋ถ๋ถ ์์ ํ ์ ์๋์ ํ์ธํ์ต๋๋ค. David ๋ ๊ฐ์ฌํฉ๋๋ค. (์ฌ์ง)
- 0
- 2
- 289




