pjj
pjj

Reputation: 2135

Getting NoSuchBeanDefinitionException even after using all annotations and component scan

I am getting

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.learn.stackoverflow.general.Person com.learn.stackoverflow.general.SpringTest.person; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.learn.stackoverflow.general.Person] 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)}

even after using all the annotations, I have annotated all my classes with @Component and adding component scan but still @Autowired gives me error.

Below are my classes:

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.stereotype.Component;

@Component
public class SpringTest {

    @Autowired
    Person person;

    public static void main(String[] args) {
        testApplicationContext();
    }

    private static void testApplicationContext() {
        // here static and instance initializers of Person class will be invoked right away, even when we are not calling getBean method
        ApplicationContext applicationContext = new FileSystemXmlApplicationContext("C:\\E_Drive\\Projects\\Workspace\\Test\\CS101\\src\\com\\learn\\stackoverflow\\general\\bean.xml");
        SpringTest springTest = (SpringTest) applicationContext.getBean("springTest");
    }

}

Person class:

import org.springframework.context.annotation.Scope;
import com.bea.core.repackaged.springframework.stereotype.Component;

@Component
@Scope(value="singleton")
public class Person {
    static{
        System.out.println("1");
    }

    {
        System.out.println("2");
    }
}

XML file:

<?xml version = "1.0" encoding = "UTF-8"?>

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="com.learn.stackoverflow.general"/>

   <!-- <bean id = "person" class = "com.learn.stackoverflow.general.Person" scope="singleton">
   </bean> -->

   <bean id = "springTest" class = "com.learn.stackoverflow.general.SpringTest" scope="singleton">
   </bean>

</beans>

Upvotes: 0

Views: 749

Answers (1)

statut
statut

Reputation: 909

Use the right import in the Person.class. Instead of

import com.bea.core.repackaged.springframework.stereotype.Component;

you have to use

import org.springframework.stereotype.Component;

BTW you can avoid using

@Scope(value="singleton")

since singleton is a default scope for Spring beans.

Upvotes: 1

Related Questions