javaspringdependency-injectionautowired

Spring is not able to autowire a dependency


I have an application which is not a dynamic web project. I have the arrangement such that its like a library in form of a jar which is exposed via interfaces. I am trying to auto wire this interface into my API project which is Dynamic web project. But it throws bean creation exception

  1. I have a MyLibraryCofiguration class in library which has @Configuration and @Import alongwith @ComponentScan.
@Configuration
@Import({ BasicConfiguration.class, OperationalLoggingConfiguration.class, RestConfiguration.class })
@ComponentScan("nl.ming.cram")
public class MyConfiguration() {

    public MyConfiguration() {
        packages("nl.ming.cram.gateway");
    }

    @Bean
    public MyInterface getMyInterface() {
        return new MyImpl();
    }
}
  1. My API project has MyApiCofiguration class which has @Import in which I am importing my MyLibraryCofiguration class. In the same class I have used:
    @Configuration
    @Import({
            MyConfiguration.class
    })
    @ComponentScan({"nl.ming.api.creditcardlist"})
    public class CreditCardListConfiguration {
    
        @Bean
         public MyInterface getMyInterface() {
            return new CramImpl();
       }
    }
  1. In my API project , in MyApiService class - I have @Autowired MyInterface to access methods of library jar as shown below:
    @Component
    public class MyAPIService {
   
        @Autowired
        MyInterface MyInterface;    
    }

It throws a Bean creation exception for getMyInterface as is shown below -

org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'creditCardService': Injection of autowired dependencies failed;

nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: nl.ing.cram.gateway.CramInterfacenl.ing.api.creditcardlist.services.CreditCardService.cramIface;

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getCramInterface': Injection of autowired dependencies failed;

nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private nl.ing.cram.dao.CramDaonl.ing.cram.gateway.CramImpl.cramDao;

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cramDao': Injection of resource dependencies failed;

nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [nl.ing.sc.customerrequest.createcustomerrequest1.CreateCustomerRequestServiceOperationClient] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, mappedName=, description=, name=, type=class java.lang.Object, lookup=, authenticationType=CONTAINER)}


Solution

  • No spring can be used in any kind of Java application.

    org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type
    

    I am able to see above exception, this means spring is able to find the type which your injecting but not its implementation.

    Check in your spring-config :-

    <context:component-scan base-package="..." />
    

    Cause of exception in your exception stack trace :-
    In your nl.ing.cram.gateway.CramImpl.cramDao class it failed to inject the dependency of type CreateCustomerRequestServiceOperationClient because it couldn't able to find its implementation.