No qualifying bean of type in Spring or Spring Boot

In this post, we will see about an exception: No qualifying bean of type. Exceptions are least expected but you might get it while working with Spring. or Spring boot.

Did you get this exception: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type?

If yes, let’s see different reasons for it.

Reason 1:
You forgot to declare the bean itself.

Let’s understand this with the help of example.


XML configuration

1. Create a simple java maven project.
2. Maven dependency
put spring and cglib maven dependency in pom.xml.

So your pom.xml will look like:

3. Create Bean class

Create a bean class called X.java in package org.arpit.java2blog .

Please note that we are using Autowired annotation to inject bean y in x.

Create another bean class called Y.java in package org.arpit.java2blog.

4. ApplicationContext.xml
Create ApplicationContext.xml in src/main/resources as below.

We have just declared one bean x here
5. Create SpringApplicationMain.java

6. Run it
When you run above program, you will get below output.

.
.
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.arpit.java2blog.Y] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
.
.

As you can see, we are getting NoSuchBeanDefinitionException: No qualifying bean of type as there is no bean "y" declared in XML.


Java configuration

First 2 steps will remain the same.
let’s add @Component to X.java

Create another bean class called Y.java in package org.arpit.java2blog.

4. Create ApplicationConfiguration.java as below.

  1. Create Main class

    }

    1. Run it
      When you run it, you will get below output.

      .
      .
      Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.arpit.java2blog.Y] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
      .
      .

      If you add @Component to Y.java, above exception won’t occur.


    Reason 2:
    You have not added package name to @ComponentScan.

    You might be using @Component,@Service or @Repository but there is no entry for package with @ComponentScan.
    For example:
    If I change package name to "org.arpit.dummy", program won’t work,even if you have put @Component with bean Y.



    Reason 3:
    You have more than one candidate for autowiring

    Let’s understand this with the help of example.
    Let’s say you one interface named "Decorable"

    This interface is implemented by two classes.
    CurtianDecorator.java

    WallDecorator.java

    Create Room.java which will composite reference variable of type interface Decorable.

    4. Create ApplicationConfiguration.java as below.

    5. Create Main class

    6. Run it
    When you run it, you will get below output.

    .
    .
    .
    Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.arpit.java2blog.Decorable] is defined: expected single matching bean but found 2: curtianDecorator,wallDecorator
    .
    .

    Please note that this time,we are getting NoUniqueBeanDefinitionException because there are two autowired candidates for Decorable in Room class and spring is not able to resolve which one to use.
    You can solve this probem using @Qualifier annotation.

    When you run the program again, you will get below output:

    Jun 24, 2018 5:19:36 PM org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
    INFO: Refreshing org.spring[email protected]2e817b38: startup date [Sun Jun 24 17:19:36 IST 2018]; root of context hierarchy
    Decorating room with wall decorators

    That’s all about no qual


    import_contacts

    You may also like:

Related Posts

  • 17 June

    Spring XML configuration example

    Table of Contents1. Create a simple java maven project.2. Maven dependency3. Create Bean class4. ApplicationContext.xml5. Create SpringXMLConfigurationMain.java6. Run it In this post, we will see how to create Spring hello world XML based configuration example. Here are simple steps to create Spring XML configuration example. 1. Create a simple java maven project. 2. Maven dependency put […]

  • 15 June

    Injecting Prototype bean into a Singleton bean in Spring

    Table of ContentsProblemSolutionUsing Method injectionUsing ObjectFactoryUsing ApplicationContextAware In this post, we will see how to inject prototype bean scope into Singleton Instance in Spring. This is one of the most asked Spring interview questions. Problem When you inject prototype bean to singleton bean, prototype bean still behave like a singleton bean. Let’s understand this with […]

  • 15 June

    Circular dependencies in Spring

    Table of ContentsProblemSolutionRedesignSetter [email protected] with @Autowired [email protected] with @Autowired annotation In this post, we will discuss one of the most asked Spring interview questions. What happens if there are circular dependencies in Spring. Problem What if there are circular dependencies in Spring? For example: Class A requires an instance of Class B and Class B […]

  • 12 September

    Spring init-method and destroy-method example

    In this post, we will see about Spring init-method and destroy-method. When bean is instantiated or destroyed , there are some operations you may need to perform, so you can use init-method and destroy-method to call this methods while bean is being created or destroyed. Lets understand it with the help of simple example: For […]

  • 27 July

    Prefix “context” for element “context:component-scan” or “context:annotation-config” is not bound : Spring error

    When you are working on spring or spring mvc application, you may encounter below error message. org.xml.sax.SAXParseException: The prefix “context” for element “context:component-scan” is not bound . or org.xml.sax.SAXParseException: The prefix “context” for element “context:annotation-config” is not bound . This issue generally occurs when you do not include context namespace. For example: Lets say you have below […]

  • 26 July

    How to load multiple Spring configuration files

    In this post , we will see how to load multiple spring bean configuration files. Sometimes, you have multiple spring bean configuration file , you may have different configuration file for service, different for business object. When you are working on complex application, it is not good practice to have only single xml configuration, you […]

Leave a Reply

Your email address will not be published. Required fields are marked *

Subscribe to our newletter

Get quality tutorials to your inbox. Subscribe now.