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 и попробуйте