STS를 실행 시켰는데 이 상태로 응답없음이 떴다.

오류가 뜨는 것도 아니고 그냥 무반응이였다.

컴퓨터에 이상이 있나 해서 3번정도 재부팅을 하고 구글링을 하기 시작함.

검색해보니 자바 환경설정의 문제일 수도 있다고 해서 STS.ini 파일을 수정함.





sts가 설치 되어 있는 경로로 들어가 STS.ini 파일을 열어준다.




-startup

plugins/org.eclipse.equinox.launcher_1.5.100.v20180827-1352.jar

--launcher.library

plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.800.v20180827-1352

-product

org.springsource.sts.ide

--launcher.defaultAction

openFile

-vm

C:\Program Files\Java\jre1.8.0_171\bin\javaw.exe

-vmargs

-Dosgi.requiredJavaVersion=1.8

--add-modules=ALL-SYSTEM

-Xms40m

-Dosgi.module.lock.timeout=10

-Dorg.eclipse.swt.browser.IEVersion=10001

-Xmx1200m


그리고 빨간색 글씨로 표시된 부분을 추가해주는데 -vmargs 전에 추가를 해주어야 한다.




<context:component-scan base-package="org.zerock.service"></context:component-scan>

나같은 경우는 위의 코드처럼 root-context.xml 안에 pakage경로를 설정 해주지 않아서 에러가 떴다.





+)에러 구글링을 해보다가 도움이 되는 자료이기에 추가


@Inject 어노테이션은 자바 표준입니다..@Autowired나 @Resource 같이 Bean 주입하는 기능을 구현할때 저 Inject 어노테이션을 사용하는거죠..만약 누군가가 스프링이 아닌 새로운 프레임워크를 만들었고 Bean 주입하는 기능을 구현했을때 별도로 만든 어노테이션이 없다면 @Inject 어노테이션을 사용했을때 해당 기능이 구현이 되도록 해야 합니다..@Inject 어노테이션이 문제가 있어서 이 문제가 발생한게 아니에요..

문제는..

<context:component-scan base-package="com.comtrue.controller" />

이 부분입니다..

spring이 Bean을 등록할때 클래스를 검색해서 클래스에 특정 어노테이션(@Controller, @Service, @Repository, @Component 등)이 붙어 있으면 이를 Spring Bean 클래스라고 인식하고 등록하게 됩니다..

이때 클래스를 검색하는 기능이 저 component-scan 인데 base-package에 명시된 package를 기준으로 해서 그 하위를 검색하는거에요..

근데 보죠..controller를 기준으로 클래스를 검색하면 지금 구조에서는 HomeController 클래스 하나만 Spring Bean 클래스로 등록되고 다른 클래스들은 검색 기능으로 인한 등록이 되질 않습니다..

그렇기 땜에 TestService를 주입받고 싶어도 그 클래스가 Spring Bean으로 등록이 되어 있지 않기 때문에 주입을 못받아서 에러가 발생하는거에요..

이 부분을 그래서 다음과 같이 고쳐야 합니다

<context:component-scan base-package="com.comtrue" />

이렇게 하면 comtrue 밑에서부터 검색하기 때문에 그 하위 패키지은 controller 패키지는 물론 service 패키지도 포함해서 검색하는거죠..

Spring에서 Bean 주입을 받을려면 주입 받고자 하는 Bean 도 Spring 에 등록되어 있어야 한다..

이 원칙을 잘 기억하고 있어야 합니다..이걸 의외로 까먹고 접근하는 사람들이 많아요..단지 클래스만 있다고 주입이 되는게 아니에요..







출처:https://okky.kr/article/291232 '제타건담'님

No grammar constraints (DTD or XML Schema) referenced in the document.

이런 warning이 떠서 검색을 해봤더니 아래와 같이 <!DOCTYPE configuration>을 추가를 해주니 사라졌다.



<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration>

<configuration>

<include resource="org/springframework/boot/logging/logback/base.xml"/>

<!-- log4jdbc-log4j2 -->

<logger name="jdbc.sqlonly" level="DEBUG"/>

<logger name="jdbc.sqltiming" level="INFO"/>

<logger name="jdbc.audit" level="WARN"/>

<logger name="jdbc.resultset" level="ERROR"/>

<logger name="jdbc.resultsettable" level="ERROR"/>

<logger name="jdbc.connection" level="INFO"/>


</configuration>


+ Recent posts