티스토리 뷰

이전글(http://holy1017.tistory.com/35)에서 서비스 파일만 생성하다 끝났다.

일단 지금상태에서 실행해보면 

홈페이지는 정상적으로 안뜨고(어라?)

이클립스 콘솔창에는 아래같은 핵심 오류가 하나 있다.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private holy.com.test.TestService holy.com.test.TestController.svc; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [holy.com.test.TestService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

씁얼 뭐라는거야...

는 난 자주봐서 알겠다..

이전글에서 

@Controller 으로 설정된 곳(testController) 안에서 @Autowired로 설정된 클래스(TestService)는 

다른 @Service로 설정된 클래스를 참조한다고 했다..

그리고 난 @Service을 설정 안했다!!!

TestService 클래스 파일만 만들었지 @Service설정파일 안만들었다고!!


이제왓서 말하기좀 뭣하지만

이게 왜 중요하냐면 

스프링 프로젝트 제작 전재 자체가 "여러사람이 동시에 만들기" 때문이다

즉 내가 test1 컨트롤 안에 test2란 클래스를 참조해 쓴다고 하자

근데 다른사람이 test2란 서비스를 만들때 my2test 라는 이름으로 만들었다고 치자..

그럼 난 test2라고 이름을 지었던걸 my2test 라고 다 수정해야한다 ^^

죽을래.. 표준 어따 쳐팔아먹었어!!


이럴때를 위한게어노테이션이다

어노테이션만 있으면 서비스에서 @Service("mytest")  같이 별칭을 설정하고

컨트롤러에선  

@Autowired

@Qualifier("mytest")

같이 해당 별칭을 참조해 갔다가 쓸수있다.

각각 단 한줄식만 설정하거나 한쪽만 설정하면 된다.


자 그럼 서비스 설정하러 가자

/test/src/main/java/holy/com/test/TestService.java

package holy.com.test; @Service public class TestService { }

같이 수정하면 일단 에러 뜬다 해당 빨간줄 클릭해서 임포트 하고나 자동 임포트(이전글 참조)를 하자

그리고 저장후 현재 서버가 켜진 상태라면 잠시기다리면 컴파일드 라고 뜬다

자바 파일은 저장후 잠시 기다리면 서버가 알아서 반영해준다.

자바파일은 바로 못쓰고 클래스 파일로 컴파일을 해줘야 서버에서 사용 가능하기 때문

그리고 홈페이지 새로고침하면 일단 버그는 엇기에 홈페이지가 뜬다


하지만 서비스가 저걸로 끝이라면 말이 안되지!

테스트용 메소드라도 하나 넣자

@Service

public class TestService {


public String test() {

return this.toString();

}

}

설렁하다 못해 하품 나온다

근데 저렇게 만들어봤자 불러주는이가 엇으면 말짱 꽝이다

컨트롤러로 가자

/test/src/main/java/holy/com/test/TestController.java 파일 열고

model.addAttribute("serverTime", formattedDate); 부분 에서대충 커서를 아무데나 클릭하고 컨트롤 알트 아래화살표키

짠 ~ 한줄이 통째로 복사됬다

이클립스 단축키는 구글링하자

니가 편해진다

그리고 수정하자

//홈페이지로 serverTime 라는 이름으로 파람값을 넘김

model.addAttribute("serverTime", formattedDate);

model.addAttribute("testService", svc.test());

이러고 홈페이지 갱신해봤자 안뜬다..

아니 애초에 http://localhost:8080/test/ 라고 치면 더더욱 안뜬다...

내가 입력한 컨트롤러는 TestController 이다

@RequestMapping(value = "/test/") 라고 설정 되있다!!

http://localhost:8080/test/test/라고 쳐야된다는거다!!

지난 글에 설명 했을텐데?


그리고 저 주소로 쳐도 해당값 안나온다

해당 파일(어떤건지는 암? 지난글에 설명 했음)에서 

testService 라는게 입력된 곳이 아무데도 없다.

당연 안뜬다!

가자!

수정하자!


/test/src/main/webapp/WEB-INF/views/home.jsp (결국 써주는 나란 착한녀석..)

적당한 위치에 

# 이라 쓰고 컨트롤 E... 아 미안 이건이메트란 이클립스 플러그인을 깔아야한다. 

구글링 가라

알면 편해진다


아무튼 저러면 <div id=""> </div>이란게 자동 입력된다

안써도 되긴한데 나중에 수정을 위하서..

그리고 그사이에 ${testService } 라고 입력하자

안의 testService 를 파람 이라고 한다

세션도 있고 리퀘도 있고 어플도 있고..

아무튼 "표현언어" 였나 구글링해라 이거 안쓰면 jsp에서 자바 언어를 써야한다.

난 그짓 안해!


그리고 저장 홈페이지만 새로고침 하면 된다

참고로 jsp파일도 컴파일 해야된다;;

저장후 좀기다리면 콘솔창에서 컴파일..은 개뿔 실시간 컴파일이라서 

해당 파일이 불러질때마다 변경사항 있으면 재컴파일

없으면 기존 클래스 파일 가져온다


 그러니 바로 홈페이지 새로고침

오우~ 해당 클래스명이랑 주소값이 출력된다.

이걸로 일단 서비스 어노이션 정상 작동 한다.

그리고 결과 코드..

예전글 참조하면 이정돈 식은죽 먹기다

스타일이 살작 바뀐게 보인다.

다음은 리포..레포..?

아무튼 그거 할차례다


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함