티스토리 뷰

|에러문구

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'userService' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:698)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1175)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1054)
at com.springbookbiz.user.UserServiceClient.main(UserServiceClient.java:15)

 

 

컴포넌트를 어노테이션으로 변경하면서 발생한 에러다. 어노테이션으로 수정한 부분 원상복귀하고 컴포넌트방식으로 작동하니 정상작동한다. 다만, 어노테이션으로 적용하면서 별 소스를 건드리지 않았음에도 불구하고 위와 같은 에러가 발생했다. 

 

|에러 원인

applicationContext.xml 파일에서 bean의 경로를 잘못 설정해줬기 때문에 에러가 발생했다.

원래 경로는 <context:component-scan base-package="com.springbook.biz"/>였다. 근데 내가 생성한 파일들의 경로는

com.springbookbiz였던것이다. 이것이 잘못됐다고 생각을 못했었는데 에러 문구를 계속해서 보고 무슨 의미인가 해석하고 분석하니 경로의 원인들을 하나하나 살편봤다. 결국에 주소가 잘못됐기 때문에 위와 같은 에러가 발생했다. 

 

|applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
	
		 
	<context:component-scan base-package="com"/>
	
	<!-- <bean id="userService" class="com.springbookbiz.user.impl.UserServiceImpl">
		<property name="userDAO" ref="userDAO"/>
	</bean>
	<bean id="userDAO" class="com.springbookbiz.user.impl.UserDAO"/> -->
	
	<!-- 
	<context:component-scan base-package="polymorphism"></context:component-scan>
	 --> 
	
	 
						
	<!--  
	<bean id="tv" class="polymorphism.SamsungTV"></bean>
	-->
	<!--
	<bean id="tv" class="polymorphism.SamsungTV" init-method="initMethod"/>
	  -->
	
	<!-- 
	<bean id="tv" class="polymorphism.SamsungTV" destroy-method="destroyedMethod"/> 
	-->
	
	<!-- 
	<bean id="tv" class="polymorphism.SamsungTV" lazy-init="true"/>
	 -->
	
	<!-- 
	<bean id="tv" class="polymorphism.SamsungTV" scope="singleton"/>
	 -->
	 
	 <!-- 
	<bean id="tv" class="polymorphism.SamsungTV" scope="prototype"/> 
	  -->
	
	 
	
	<!-- 
	<bean id="tv" class="polymorphism.SamsungTV" scope="session"/>
	<bean id="tv" class="polymorphism.SamsungTV" scope="request"/>
	위 두 가지는 에러가 발생한다.
	 -->
	 
	 <!-- 
	 <bean id="tv" class="polymorphism.SamsungTV">
	 	<constructor-arg ref="apple"></constructor-arg>
	 	<constructor-arg value="270000"></constructor-arg>
	 </bean>
	 
	 <bean id="apple" class="polymorphism.AppleSpeaker"/>
	  -->
	  
	 <!-- 
	 <bean id="tv" class="polymorphism.SamsungTV">
	 	<property name="speaker" ref="apple"></property>
	 	<property name="price" value="270000"></property>
	 </bean>
	 
	  -->
	 
	 <!-- 
	 	 <bean id="tv" class="polymorphism.SamsungTV" 
	 p:speaker-ref="sony" p:price="270000"/>
	 
	 <bean id="sony" class="polymorphism.SonySpeaker"/>
	 <bean id="apple" class="polymorphism.AppleSpeaker"/>
	  -->

	<!-- 
	
	 -->
	 <!-- 
	 <bean id="collectionBean" 
	class="com.springbook.ioc.injection.CollectionBean">
	 
	  -->
			<!-- 
		1. List 타입
		<property name="addressList">
			<list>
				<value>서울시 강남구 역삼동</value>
				<value>서울시 성동구 행당동</value>
			</list>
		</property>
		
		 -->
		 
		 <!-- 
		 2. Set 타입
		 <property name="addressList">
			<set value-type="java.lang.String">
				<value>서울시 강남구 역삼동</value>
				<value>서울시 성동구 성수동</value>
				<value>경기도 하남시 미사동</value>
			</set>
		</property>
		 
		  -->
		<!-- 
		3. Map타입
				 <property name="addressList">
		 	<map>
		 		<entry>
		 			<key><value>고길동</value></key>
		 			<value>서우릿 강남구 역삼동</value>
		 		</entry>
		 		<entry>
		 			<key><value>마이콜</value></key>
		 			<value>서울시 강서구 화곡동</value>
		 		</entry>
		 	</map>
		 </property>
		 <property name="addressList">
		 	<props>
		 		<prop key="고길동">서울시 강남구 역삼동</prop>
		 		<prop key="마이콜">서울시 강서구 화곡동</prop>
		 	</props>
		 </property>
	
	</bean>
	
	<bean id="tv" class="polymorphism.LgTV"></bean>
	
	
		 -->

	<!-- 
	SonySpeaker 객체 의존성 주입
	<beans>
		<context:component-scan base-package="polymorphism"></context:component-scan>
		<bean class="polymorphism.SonySpeaker"></bean>
	</beans>
	-->

	<!-- 
	 AppleSpeaker 객체 의존성 주입
		<beans>
		<context:component-scan base-package="polymorphism"></context:component-scan>
		<bean class="polymorphism.AppleSpeaker"></bean>
	</beans>
	
	 -->

</beans>

 

 

|해결방법

빈주소를 com으로 바꾸거나 com.springbookbiz로 수정해야한다.

component-scan은 해당 경로에 있는 파일을 모두 스캔한다는 의미인데 경로가 잘못되면 스캔을 못하기 때문에 에러가 발생한다는 점을 명심하면될 것 같다.