2016-05-13 30 views
5

私は春には新しく、学習のためのアプリケーションを作成しようとしていますが、Autowiringで問題が発生しています。私は春のブートに取り組んでいます。org.springframework.beans.factory.UnsatisfiedDependencyException:名前が 'demoRestController'のBeanを作成中にエラーが発生しました

春のブートコードが

public class DemoApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(DemoApplication.class, args); 
    } 
} 

LoginBean.java

@Service 
@Component 
public class LoginBean { 
    private String userId; 
    private String pwd; 

    public String getUserId() { 
     return userId; 
    } 

    public void setUserId(String userId) { 
     this.userId = userId; 
    } 

    public String getPwd() { 
     return pwd; 
    } 

    public void setPwd(String pwd) { 
     this.pwd = pwd; 
    } 

DemoRestController.java

@RestController 
@EnableAutoConfiguration 
@RequestMapping("/demo") 
@Component 
public class DemoRestController { 


    private final LoginBean loginBean; 

    @Autowired 
    public DemoRestController(LoginBean loginBean) { 
     this.loginBean=loginBean; 
    } 

    @RequestMapping(value = "/login/{id},{pwd}", method = RequestMethod.GET, produces = "application/json") 
    public @ResponseBody LoginBean loginService(@PathVariable String id, @PathVariable String pwd) { 
     //LoginBean loginBean = new LoginBean(); 

     loginBean.setUserId(id); 
     loginBean.setPwd(pwd); 
     return loginBean; 
    } 

私は私の@Autowired仕事をするために、次のシナリオを試してみました:

  1. @Autowired to LoginBean loginBean;
  2. Controllerクラスとautowired settersでLoginBeanのゲッターセッターを作成しました。
  3. 上記のコードで指定されているように、コントローラのコンストラクタが作成され、オートワイヤードされています。以下は

私は

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'demoRestController': Unsatisfied dependency expressed through constructor argument with index 0 of type [com.ag.digital.demo.bean.LoginBean]: No qualifying bean of type [com.ag.digital.demo.bean.LoginBean] 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 [com.ag.digital.demo.bean.LoginBean] 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:749) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) ~[spring-context-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) ~[spring-context-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE] 
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE] 
    at com.ag.digital.demo.boot.DemoApplication.main(DemoApplication.java:14) [classes/:na] 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.ag.digital.demo.bean.LoginBean] 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:1373) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    ... 19 common frames omitted 
+0

こんにちは私は私の問題を解決しました。 @アンディあなたの貴重な反応に感謝します。申し訳ありませんが、SpringBootのApplicationクラスも提供していたはずです。実際、主な問題はSpring BootのApplication Classでした。私はコードを提供しています。 パブリッククラスDemoApplication { \tパブリック静的無効メイン(文字列[] args){ \t \t SpringApplication.run(DemoApplication.class、引数)。 \t} }クラス名とパラメータクラス名は同じでなければなりません。これは私の実際の問題でした。 – Brain

答えて

13

あなたDemoApplicationクラスがcom.ag.digital.demo.bootパッケージであり、あなたのLoginBeanクラスがcom.ag.digital.demo.beanパッケージである取得していますエラーです。デフォルトでは、コンポーネント(メインアプリケーションクラスDemoApplicationの同じパッケージまたはサブパッケージに含まれているコンポーネント(@Componentで注釈を付けられたクラス)が見つかります。これは、LoginBeanが見つかりませんので、依存性注入が失敗することを意味します。

  1. com.ag.digital.demo.bootに移動LoginBeanまたはサブパッケージ:

    はあなたの問題を解決するためにいくつかの方法があります。

  2. scanBasePackages属性が@SpringBootApplicationであるコンポーネントをスキャンするパッケージをDemoApplicationに設定します。

問題の原因ではない、しかし、あなたが投稿したコードで非常に適切ではありませんされている他のものの数:

  • @Serviceはそうあなたが必要としない@Componentの専門でありますLoginBean
  • の両方が同様に、@RestControllerはそうあなたが@EnableAutoConfigurationは珍しい場所であるDemoRestController
  • DemoRestControllerの両方を必要としない@Componentの専門です。このアノテーションは、通常、メインアプリケーションクラス(DemoApplication)に直接か、または,@Configuration、および@EnableAutoConfigurationの組み合わせである@SpringBootApplicationを経由して検出されます。
関連する問題