BeanCreationException error happend on spring when I try to seperate the springMVC context with the root context bean scan -
i define 2 spring context files application, springmvc-config.xml springmvc , han-config.xml root application context. want utilize springmvc-config.xml scan @controller beans , han-config.xml scan @component, @repository, , @service beans
my problem if utilize <context:component-scan base-package="com.leo.han" / > in springmvc-config.xml application run , no errors during deployment. if want utilize <context:component-scan base-package="com.leo.han.controllers" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.controller" /> </context:component-scan> in springmvc-config.xml scan controllers , utilize <context:component-scan base-package="com.leo.han" use-default-filters="false"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.controller" /> </context:component-scan> in han-config.xml scan @component, @repository, , @service beans recommended approach in spring forum. terrible errors org.springframework.beans.factory.beancreationexception: error creating bean name 'logincontroller': injection of autowired dependencies failed; nested exception org.springframework.beans.factory.beancreationexception: not autowire field: private com.leo.han.services.userservice com.leo.han.controllers.logincontroller.userservice; nested exception org.springframework.beans.factory.nosuchbeandefinitionexception: no qualifying bean of type [com.leo.han.services.userservice] found dependency: expected @ to the lowest degree 1 bean qualifies autowire candidate dependency. dependency annotations: {@org.springframework.beans.factory.annotation.autowired(required=true)} seems userservice bean never created reason can help me on bundle construction is: com.leo.han.controllers (all controllers annotated @controller) com.leo.han.services (all service annotated @service) com.leo.han.dao (all das annotated @repository) here sample code @controller public class logincontroller { @autowired private userservice userservice; @requestmapping(value = "/login", method = requestmethod.get) public string showlogin() { homecoming "login"; } @requestmapping(value = "/newaccount", method = requestmethod.post) public string newaccountpost(model model, user user) throws exception { user.setenabled(true); user.setauthority("app_view"); userservice.adduser(user); homecoming "accountcreated"; } } @service("userservice") public class userservice { @autowired private userdao userdao; public list<user> getallusers() { homecoming userdao.searchall(); } public void adduser(user user) { userdao.createuser(user); } public boolean isuserexist(user user) { homecoming userdao.isuserexist(user); } } web.xml <context-param> <param-name>contextconfiglocation</param-name> <param-value> /web-inf/config/han-config.xml </param-value> </context-param> <filter> <display-name>springsecurityfilterchain</display-name> <filter-name>springsecurityfilterchain</filter-name> <filter-class>org.springframework.web.filter.delegatingfilterproxy</filter-class> </filter> <filter-mapping> <filter-name>springsecurityfilterchain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.contextloaderlistener</listener-class> </listener> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class> <init-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/config/springmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> springmvc-config.xml (springmvc context config file) <context:component-scan base-package="com.leo.han.controllers" /> <mvc:resources mapping="/resources/**" location="/resources/" /> <mvc:annotation-driven></mvc:annotation-driven> <bean id="viewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolver"> <property name="prefix"> <value>/web-inf/jsps/</value> </property> <property name="suffix"> <value>.jsp</value> </property> <property name="order" value="1"></property> </bean> <bean id="viewtileresolver" class="org.springframework.web.servlet.view.tiles2.tilesviewresolver"> <property name="order" value="0"></property> </bean> <bean class="org.springframework.web.servlet.view.tiles2.tilesconfigurer" id="tilesconfigurer"> <property name="definitions"> <list> <value>/web-inf/layouts/layout.xml</value> </list> </property> </bean> <bean id="messagesource" class="org.springframework.context.support.reloadableresourcebundlemessagesource"> <property name="basename" value="classpath:i18n/message" /> <property name="defaultencoding" value="utf-8" /> </bean> <bean id="localeresolver" class="org.springframework.web.servlet.i18n.sessionlocaleresolver"> <property name="defaultlocale" value="en"></property> </bean> <mvc:interceptors> <bean class="org.springframework.web.servlet.i18n.localechangeinterceptor"> <property name="paramname" value="language"></property> </bean> </mvc:interceptors> han-config.xml (my root applicationcontext file) <context:component-scan base-package="com.leo.han" use-default-filters="false"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.controller" /> </context:component-scan> <import resource="persistence-config.xml" /> <import resource="security-config.xml" /> please help, have search around here 2 days in order find solution case, solution seems not work case. give thanks
i using similar configuration base of operations bundle same "a.b" in both cases , 1 contains exclusion controllers ( root context) , other consists of inclusion ( mvc context) , works fine. can seek that.
now you'd love spring - if want programmatically determine candidate beans in classpath base of operations package, can write simple test programme below list candidate components.
public class testcomponentscanner { public static void main(string[] args) { classpathscanningcandidatecomponentprovider provider = new classpathscanningcandidatecomponentprovider(true); string basepackage = "com/leo"; provider.addexcludefilter(new annotationtypefilter(controller.class, true)); set<beandefinition> filteredcomponents = provider.findcandidatecomponents(basepackage); system.out.println("no of components :"+filteredcomponents.size()); (beandefinition component : filteredcomponents) { system.out.println("component:"+ component.getbeanclassname()); } provider.resetfilters(true); provider.addincludefilter(new annotationtypefilter(controller.class, true)); filteredcomponents = provider.findcandidatecomponents(basepackage); system.out.println("no of components :"+filteredcomponents.size()); (beandefinition component : filteredcomponents) { system.out.println("component:"+ component.getbeanclassname()); } }
spring-mvc
No comments:
Post a Comment