无法在spring boot中的组件类中自动装配dozer Mapper

时间:2014-09-17 17:35:54

标签: spring spring-boot autowired dozer

我是 Spring Boot 的新手。我试图用 neo4j 数据库在 spring boot mvc中开发小应用程序。以下是我的服务器

@Configuration
@ComponentScan({ "myproject" })
@EnableAutoConfiguration
@EnableNeo4jRepositories(basePackages = "myproject")
public class Server extends Neo4jConfiguration implements CommandLineRunner
{

public Server()
{
    setBasePackage("myproject");
}

@Bean
SpringRestGraphDatabase graphDatabaseService()
{
    return new SpringRestGraphDatabase("http://localhost:7474/db/data");
}

@Bean
Mapper mapper()
{
    return new DozerBeanMapper();
}

public void run(String... args) throws Exception
{
}

public static void main(String[] args) throws Exception
{
    SpringApplication.run(Server.class, args);
}

}

以下是我的主要课程

@Configuration
@ComponentScan({ "myproject.business" })
@EnableNeo4jRepositories(basePackages = "myproject")
public class MainWithStructure extends Neo4jConfiguration implements CommandLineRunner
{
@Autowired
private MyService myService;

public MainWithStructure()
{
    setBasePackage("myproject");
}

@Bean
SpringRestGraphDatabase graphDatabaseService()
{
    return new SpringRestGraphDatabase("http://localhost:7474/db/data");
}

.......
......
public static void main(String[] args) throws Exception
{
    FileUtils.deleteRecursively(new File("accessingdataneo4j.db"));

    SpringApplication app = new SpringApplication(MainWithStructure.class);
    app.setWebEnvironment(false);
    app.run(args);
}

}

以下是我的组件

@Component
public class MyService
{

@Autowired
private Mapper mapper;  //Fails to autowire org.dozer.Mapper

.....
}

以下是我的 Controller

@RestController
@RequestMapping("/rest")
public class MyController
{
@Autowired
private Mapper mapper;  //autowire sucess org.dozer.Mapper
}

当我运行主类 MainWithStructure

时,我得到了以下异常
  

org.springframework.beans.factory.BeanCreationException:创建名称为' mainWithStructure'的错误:自动连接依赖项的注入失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private myproject.business.MyService myproject.main.MainWithStructure.MyService;嵌套异常是org.springframework.beans.factory.BeanCreationException:使用名称' myService'创建bean时出错:注册自动连接的依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private org.dozer.Mapper myproject.business.MyService.mapper;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型[org.dozer.Mapper]的限定bean:期望至少有一个bean可以作为此依赖项的autowire候选者。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}

以下是我的项目结构

  

demo_project

     
      
  • 的src /主/ JAVA
  •   
     

--- myproject.main

     

------ MainWithStructure.java

     

------ Server.java

     

--- myproject.business

     

------ MyService.java

     

--- myproject.rest

     

------ MyController.java

如果我在 Controller 中自动装配org.dozer.Mapper,它就会成功自动装配它。但是,如果我在 Component 类中自动装配org.dozer.Mapper,则无法自动装配。 为什么仅在Component类上无法自动装配org.dozer.Mapper

如果我错了,请让我纠正。谢谢:))

2 个答案:

答案 0 :(得分:2)

您的Server不在@ComponentScan的其中一个软件包中,因此Mapper确实不是bean。尝试从@ComponentScan中删除显式包(因为所有内容都在主类的子包中,它将拾取所有组件)。

答案 1 :(得分:1)

您可以在包含@ComponentScan的主类中添加@SpringBootApplication 它将扫描项目中的所有子组件。