Spring - @ComponentScan не обнаруживает бины

Я новичок в весне. Я пытаюсь использовать ComponentScan. У меня есть простой бин со строковой переменной, аннотированной @Component. Попытка использовать @Configuration с классом Java вместо файла XML. Когда я пытаюсь получить доступ к бину из моего основного класса, он говорит: "Бин не найден"

структура каталога проекта

StudentTest.java

   package com.spring.Annotations.tests;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;


@Component
public class StudentTest {
    @Value("${name}")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(
    String name) {
        this.name = name;
    }

    public StudentTest()
    {
        System.out.println("obj created");
    }
}

Config.java

package com.spring.Annotations.tests;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;

@Configuration
@PropertySource("classpath=com.spring.Annoations.tests.project.properties")
@ComponentScan(basePackages={"com.spring.Annotations","com.spring.Annotations.tests"})

public class Config {

        @Bean
        public static PropertySourcesPlaceholderConfigurer properties() {
            PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
            return configurer;
        }


}

App.java

package com.spring.Annotations;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.spring.Annotations.tests.StudentTest;

public class App 
{
    public static void main( String[] args )
    {
        AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext("com.spring.Annotations.tests.Config.class");
        StudentTest s=(StudentTest)ctx.getBean("studentTest");
        System.out.println( s.getName() );
    }
}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.spring</groupId>
  <artifactId>Annotations</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Annotations</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>4.0.6.RELEASE</spring.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>


        <!-- Spring 3 dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>


    </dependencies>

</project>

project.properties

name=Madhu

Когда я запускаю класс App.java, он выдает следующую ошибку.

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'studentTest' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:641)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1157)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:280)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)
    at com.spring.Annotations.App.main(App.java:17)

4 ответа

Использование context:component-scan а также context:annotation-configв ApplicationContaxt.xml файл. Вы можете найти пример кода:

<context:component-scan annotation-config="true" base-package="com.demo.test" />

<context:annotation-config /> 

component-scan используется для сканирования всех пакетов для сканирования.

Почему вы добавляете "класс" к пути? Пытаться

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext("com.spring");

Вы можете использовать этот тип конфигурации, только если ваша версия Spring больше, чем Spring 3.1.

Можете ли вы проверить и прокомментировать вашу весеннюю версию.

AnnotationConfigApplicationContext ctx= новый AnnotationConfigApplicationContext (com.spring.Annotations.tests.Config.class);

Удалите двойные кавычки внутри AnnotationConfigApplicationContext и попробуйте

Другие вопросы по тегам