2013-08-18 108 views
0

我使用的春春注解来配置服务层添加prarameter:一旦春错误时,豆

@Configuration 
public class AccountServices { 
    @Bean 
    public List<String> getSourceAccountsList() { //Do Some thing} 

但由于方法改变路径字符串参数:

下面的代码工作正常(下面的代码)我得到的错误:

@Configuration 
public class AccountServices { 
    @Bean 
    public List<String> getSourceAccountsList(String userId) {//Dp something } 

的错误是:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'getSourceAccountsList' defined in class path resource [net/iranet/isc/saba/services/AccountServices.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [java.lang.String]: : No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:461) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1025) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:921) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:525) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:988) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:858) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795) 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723) 
    ... 30 more 
+0

您确定您使用正确的服务吗?为什么你不把服务注释为'@ Service'? getSourceAccountsList方法似乎是你需要从其他地方调用的方法,参数是从调用者提供的,而不是配置本身。 –

+0

是的,服务是从Web控制器调用的(struts action)。我发现“现在春天3.2.4”@Service注释不会比组件做任何事情。但我会使用@Service,因为他们说它可能会在将来改变 –

回答

2

我认为你是在一个错误的方式使用@Bean,尤其是在@Service层(通常@Bean方法没有一个GET,但只有在你的情况sourceAccountsList())。
谁提供userId参数,网页控制器?

如果AccountService从控制器叫你碰到这样的(伪代码):

@Service 
public class AccountServices { 
    public List<String> getAccountService(String userId) { 
    // Retrieve List<String> from database, or file, or somewhere else via DAO 
    // directly 
    } 
} 

@Controller 
public class Controller { 
    @Autowired 
    private AccountsService accountService; 

    public void doAction(Request request) { 
    String userId = request.getParameter("userId"); 

    request.putParameter("accountsList",this.accountService.getSourceAccountsList(userId)); 
    forwardTo("/newPage.jsp", request); 
    } 
} 

阅读有关弹簧装置控制器/服务/存储库(Google search有很多资源的),并从SpringSource
理解层分离后,您可以添加@Transaction管理(例如)以及所需的所有其他功能。

+0

你救了我!谢谢。还有一个帮助。 我预计Controller类应该有一个AccountServices accountServices。 所以春天可以用它来在控制器中注入AccountService。我正在运行一个示例项目,但每件事情都没有和setAccountService(AccountServices accountServices)一起工作...... –

+0

好的。如果你解决了你的问题,请接受回答 –

+0

很可能是由于自动装配(@Autowired注解),但我的建议是阅读关于Spring注释的官方文档 –

0

当您使用@Configuration和@Bean注释来配置bean时,用@Bean注释的方法的参数被认为是对另一个bean的引用,所以您应该添加带有类String的bean以及bean的名称“userId” - 名称用于按名称自动装配的参数。

+0

可以请让我知道我应该如何做注释! –

+0

你应该用@Bean注解和返回类型声明另一个方法String –

+0

你的意思是像String setUserId(String userID)和make getSourceAccountsList()使用它!我是非常新的使用春天 –