@Autowired 7

static 필드에 @Autowired(의존성 주입) 사용하기 (2024-02-09)

겉으로 보기에는 이상이 없는 코드였는데 (물론 이건 내가 실력이 없고 무지했기에 아무런 이상이 없는 코드처럼 보였던 것이다.) NullPointerException이 뜨며 에러가 뜨는 상황이 발생했다. 그래서 디버그 모드로 들어가 하나씩 살펴보던 중 이상한 부분을 발견했다. 바로 @Autowired를 사용한 service 혹은 dao가 null을 저장하고 있었다. null을 저장하고 있던 필드는 static으로 선언된 정적 필드였는데, 이 상황에서 내가 생각했던 것은 정적 필드는 @Autowired를 사용하지 못한다는 생각이었다. 찾아보니 역시나 정적 필드는 @Autowired를 사용할 수 없었고, 이 부분을 모두 바꾸려면 일정을 맞추지 못할 것 같기에 static 필드에 @Autowired를 사용하는 ..

카테고리 없음 2024.02.09

의존 자동주입 할때 타입이 일치하는 빈 중 의존 주입할 대상 빈을 선택하는 방법: @Qualifer 이용법. 2021-11-12

그런데 의문점이 생길 것이다. 만약 @Autowired를 사용해서 의존 자동주입의 대상이 되는 빈을 컨테이너에서 찾을때, 컨테이너에 등록되어 있는 해당 타입과 일치하는 빈이 여러개이면 어떤 일이 일어날까? 우선 테스트를 해보자. @Configuration @Import(AppCtx2.class) public class AppCtx1 { @Bean public MemberDao memberdao() { MemberDao m=new MemberDao(); return m; } @Bean public MemberDao memberdao2() { MemberDao m=new MemberDao(); return m; } @Bean public MemberRegisterService mrsvc() { MemberR..

자동 의존 주입 @Autowired 의 실질적 적용 (세터 메서드, 필드). 2021-11-11

우선 처음부터 난관에 부딪혔는데, 이클립스에 메이븐 프로젝트를 import하는 과정에서 pom.xml 파일을 POM.xml 이렇게 대문자로 저장해서 처음엔 임포트가 되지 않았지만 해결했다. 우선 @Autowired는 일반 클래스에 의존 주입이 필요한 "필드" 나 "메서드"에 사용된다. 필드에는 지난 포스팅에서 보여줬듯이. public class MemberRegisterService { @Autowired private MemberDao memberdao; public MemberRegisterService(MemberDao memberdao) { this.memberdao = memberdao; } public MemberRegisterService() { // TODO Auto-generated co..

스프링 설정 클래스에서 @Autowired를 통한 자동 DI, 설정메서드(세터) 형식의 DI, 두개 이상의 설정 클래스로 스프링 컨테이너 만들기. 2021-10-22

스프링에서 DI 방식은 크게 생성자 주입 방식도 있고, 세터 메서드를 통해서 의존 주입도 가능하다. @Configuration public class AppCtx1 { @Bean public MemberDao memberdao() { MemberDao m=new MemberDao(); return m; } @Bean public MemberRegisterService mrsvc() { MemberRegisterService mrsvc=new MemberRegisterService(memberdao()); //생성자를 통한 DI return mrsvc; } @Bean public PasswordChangeService pcsvc() { PasswordChangeService pcsvc=new Passwor..

빈 객체 등록의 자동화: 컴포넌트 스캔( @Autowired 과는 별개의 개념임. 혼동X) 2021-06-02

우선적으로 내가 헷갈린 부분은 컴포넌트 스캔이 마치 @Autowired의 대체재같은 느낌을 받은 것이다. 무언가 자동화...주입..스프링 이런 말을 보고 내가 오해한 것 같다. 하지만 확실하게 구별해야 한다. @Component : 자바 빈 객체를 @Configuration에서 @Bean 이렇게 설정메서드를 통한 수동 등록이 아닌, 스프링이 편하게 @ComponentScan 애너테이션을 통해 자바 빈에 등록해줄 클래스를 지정하는 애너테이션. @Autowired: 이미 등록된 자바 빈 객체를 의존주입을 위해 기존에는 세터나, 생성자 주입방식으로 DI를 했다면, 이젠 스프링에서 @Autowired가 붙여진 클래스와 같은 타입의 빈 객체를 찾아서 DI 해주기 위해 필드나, 메서드 앞에 붙이는 애너테이션. 요약..

자동의존의 대상이 되는 클래스가 자손클래스일때, @Autowired 사용시 에러 처리법. 2021-06-01

우선 만약 이전 포스트에서는 @Autowired를 붙여서 자동의존주입을 하고자 하는 클래스의 타입이 빈 객체에 등록된 타입을 스프링이 탐색했을때, 1개로 특정지어지지 않을 경우 스프링은 에러를 낸다고 배웠다. 이번엔 쫌 다른 경우인데, 만약 스프링 빈에 등록할 객체가 이미 등록되어있는 빈 객체를 상속받은 클래스타입이라면 어떻게 될까? 예를 들어보자. public class MemberSummaryPrinter extends MemberPrinter { @Override public void print(Member member) { System.out.printf( "회원 정보: 이메일=%s, 이름=%s\n", member.getEmail(), member.getName()); } } 만약 이렇게 이미 빈..

스프링 의존 자동 주입 @Autowired와 @Qualifier, 2021-05-31

이전 포스트에서 설정클래스의 의존이 필요한 필드에 @Autowired 애너테이션을 붙이면 스프링에서 @Autowired 가 붙여진 클래스와 타입이 같은 빈 객체를 찾아서 필드에 할당한다. 오늘 공부한 부분은 이 @Autowired를 위치시킬수 있는 곳이다. 1. 필드 우선 가장 기본적인 형태로 의존이 필요한 클래스에서 의존의 대상이 되는 클래스의 참조변수에다가(인스턴스변수) @Autowired를 붙이는 것이다. public class ChangePasswordService { @Autowired private MemberDao memberDao; public void changePassword(String email, String oldPwd, String newPwd) { Member member = ..