我是 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
?
如果我错了,请让我纠正。谢谢:))
答案 0 :(得分:2)
您的Server
不在@ComponentScan
的其中一个软件包中,因此Mapper
确实不是bean。尝试从@ComponentScan
中删除显式包(因为所有内容都在主类的子包中,它将拾取所有组件)。
答案 1 :(得分:1)
您可以在包含@ComponentScan的主类中添加@SpringBootApplication 它将扫描项目中的所有子组件。