当前位置: 首页 > 知识库问答 >
问题:

无法在spring boot的组件类中自动生成dozer映射器

曾鸿振
2023-03-14

我是新来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
}

运行main类MainWithStructure时,我遇到以下异常

org.springframework.beans.factory.BeanCreationException:创建名为“main withStructure”的bean时出错:注入autowired依赖项失败;嵌套异常为org.SpringFramework.Beans.Factory.BeanCreationException:无法自动连接字段:private MyProject.Business.MyService MyProject.Main.MainWithStructure.MyService;嵌套异常为org.springframework.beans.factory.beanCreationException:创建名为“My Service”的bean时出错:注入autowired依赖项失败;嵌套异常为org.springframework.beans.factory.beanCreationException:无法自动连接字段:private org.dozer.mapper MyProject.Business.MyService.mapper;嵌套异常为org.springframework.beans.factory.noSuchBeanDefinitionException:未找到依赖项得[org.dozer.mapper]类型得合格bean:需要至少一个具有此依赖项自动候选资格得bean.依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}

下面是我的项目结构

demo_project

  • SRC/Main/Java

--MyProject.Main

------MainWithStructure.java

------Server.java

--MyProject.Business

------MyService.java

--MyProject.REST

------MyController.java

如果我在Controller中自动连接org.dozer.mapper,它就成功地自动连接了它。但是如果我在组件类中自动连接org.dozer.mapper,它就不能自动连接。为什么它不能只在组件类上自动连接org.dozer.mapper

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

共有2个答案

荀嘉熙
2023-03-14

您可以在主类中添加@SpringBootApplication,主类具有@ComponentScan,它将扫描Project中的所有子组件

松骏俊
2023-03-14

您的服务器不在@componentscan的包中,因此映射器确实不是bean。尝试从@componentscan中删除显式包(因为所有内容都在主类的子包中,它将拾取所有组件)。

 类似资料:
  • 几个小时以来,我一直在努力让MapStruct为JAXB生成的类生成有效的映射器。这些类的特殊性在于,它们既没有集合的setter,也没有集合的adder。例如: 类avove有一个getter和一个属性设置器(本例中为firstName),但对于集合(此处列出),它只有一个getter。因此,消费者有责任通过getAddressTypes(add(new AddressType(...))进行访

  • null 这是我运行单元测试时得到的跟踪: 我认为在我的pom.xml文件的build/plugin部分缺少或放错了地方 可以在这里查看项目的源代码: https://github.com/alfredux79/mapstruct-lombock-springboot/tree/stack-overflow-question

  • 本文向大家介绍Myeclipse 自动生成可持久化类的映射文件的方法,包括了Myeclipse 自动生成可持久化类的映射文件的方法的使用技巧和注意事项,需要的朋友参考一下 1.打开DB Browser,新建一个数据库的连接,找到想要持久化操作的数据库表的图标,右键选择hibernate reverse engineering 2.之后出现如下所示:      java src folder:对应工

  • classC是一个抽象类,ClassD是一个具体类。当我映射A->B时没有问题,但是当我映射B->A时,我得到了InstantiationException。我怀疑推土机试图实例化抽象类ClassC。有什么属性可以告诉dozer使用ClassD吗?请帮帮忙。 [EDIT1]-添加了完整的类声明。

  • 我有两个需要映射的继承层次结构。一个层次结构是国内的,另一个是野生的。我有抽象的Domestic动物和具体的DomesticCat和DomesticDog扩展它。在第二个层次结构中,我有抽象的Wild动物和具体的WildCat和WildDog扩展它。我还有另外两个类,分别是WildAnimalFeeder具有Wild动物的成员对象和DomesticAnimalFeeder具有DomesticAni

  • 我在Postgres数据库中创建了一个新表 但我得到的错误是: 我已将library.xml文件放在资源文件夹中。我是jooq的新手,Spring启动。请帮助我如何自动生成jooq类。