Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >spring-data.与Autowired的新4j冲突

spring-data.与Autowired的新4j冲突
EN

Stack Overflow用户
提问于 2018-07-08 02:12:17
回答 1查看 227关注 0票数 0

因此,我有一个使用spring ne4j的项目,遇到了一个不太清楚的问题。对于Spring-ne4j,Neo4jConfig.java,我使用java配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
@EnableNeo4jRepositories(basePackages = "org.neo4j.example.repository")
@EnableTransactionManagement
public class Neo4jConfig extends Neo4jConfiguration {

    @Bean
    public SessionFactory getSessionFactory() {
        // with domain entity base package(s)
        return new SessionFactory("org.neo4j.example.domain");
    }

    // needed for session in view in web-applications
    @Bean
    @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public Session getSession() throws Exception {
        return super.getSession();
    }

}

I有一个DAO和一个工具,BeanDaoImpl.java:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Repository
public class BeanDaoImpl implements BeanDao {
    public String getStr() {
        return "from BeanImpl";
    }
}

然后我有一个使用DaoImpl的服务,注意到自动发色的是BeanDaoImpl,而不是BeanDao

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Service
public class MyBeanService {
    @Autowired
    private BeanDaoImpl daoImpl;


    public String getServiceString(){
        return daoImpl.getStr();
    }
}

下面是我的app-context.xml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <context:component-scan base-package="com.springconflict" />

该版本是SpringFramework4.2.5,spring new4j4.1.11,似乎spring neo4j与Spring4.2.5兼容;

以下是编译错误信息:

由: org.springframework.beans.factory.BeanCreationException:无法自动生成字段引起:私有com.springconflict.service.MyBeanService.daoImpl;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:,没有找到com.springconflict.dao.impl.BeanDaoImpl类型的限定bean :期望至少有一个bean,它可以作为该依赖项的自动选择。依赖性注释:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

可能是我删除了Neo4jConfig,或者使用了测试可以通过的@Autowired BeanDao。另外,我使用了一个普通的@Configuration类,测试仍然通过,所以问题可能在Neo4jConfiguration中出现,有人能告诉我为什么以及如何解决这个问题吗?在实际项目中,我无法将@Autowired BeanDaoImpl更改为@Autowired BeanDao

所有代码都在这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-10 03:06:26

TL;DR答案:在Neo4jConfig中定义以下附加bean,从而覆盖SDN4.x的默认PersistenceExceptionTranslationPostProcessor实例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Bean
PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() {
    PersistenceExceptionTranslationPostProcessor p = new PersistenceExceptionTranslationPostProcessor();
    p.setProxyTargetClass(true);
    return p;
}

长答案: Spring Data Neo4j使用Spring PersistenceExceptionTranslationPostProcessor将Neo4j OGM异常重新映射为Spring数据异常。这些处理器应用于@Repository类型的所有组件。

因此,后处理器现在在您的BeanDoaImpl周围形成一个代理,因此它基本上类似于另一个类。如果您使用接口,这会很好,但如果您希望将bean分配给具体的类,则不会。

Spring可以被全局配置为创建子类,而不是标准的基于Java接口的代理(它是通过使用CGLIB实现的),但这在默认情况下是不存在的,对于Spring4.2.x和Spring数据,Neo4j 4.2.x也无关紧要,因为上面的post处理器独立于该机制。

用一个显式配置的替换它可以解决您的问题。

从体系结构的角度来看(或者从代码的角度来看),最好是注入接口,而不是具体的类。

请让我知道,如果我能帮你:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51230940

复制
相关文章
Python中根据时间自动创建文件夹
Python中根据时间自动创建文件夹 import shutil import os def remove_file(old_path, new_path): print(old_path) print(new_path) filelist = os.listdir(old_path) #列出该目录下的所有文件,listdir返回的文件列表是不包含路径的。 print(filelist) for file in filelist: src = os.
青阳
2021/03/31
1.4K0
查找目录中同名的文件或者文件夹
查找Linux、MAC下同名文件和文件夹。比如 Folder1和folder1 、filename1和Filename1。
用户3135539
2018/09/12
3.9K0
在WordPress媒体库中创建文件夹
WordPress默认后台媒体管理功能比较弱,不能整理不同类型媒体文件,如果您上传了大量媒体文件,都混杂在一起,无法管理,我们可以通过WordPress丰富的插件获得更好的媒体目录。
星哥玩云
2022/06/11
2.6K0
在WordPress媒体库中创建文件夹
WordPress自动在uploads文件夹内创建子文件夹
在开发主题或者插件的时候,经常要创建一个自定义的文件夹,我经常使用的一种方法就是在插件或主题安装的时候,先让程序自动到某个文件夹下先检测这个文件夹是否存在,如果不存在就自动创建一个文件夹。 下面的代码演示了如何在uploads文件夹中自动地创建一个自定义文件夹: function myplugin_activate() { $upload = wp_upload_dir(); $upload_dir = $upload['basedir']; $upload_dir = $upload_dir . '/my
Jeff
2018/01/19
1.7K0
spark读取多个文件夹(嵌套)下的多个文件
在正常调用过程中,难免需要对多个文件夹下的多个文件进行读取,然而之前只是明确了spark具备读取多个文件的能力。
sparkexpert
2022/05/07
3.2K0
使用Power Automate在Onedrive for Business中创建空文件夹
在Onedrive for Business(以下简称ODB)中创建一个文件是非常轻松的一件事:
陈学谦
2023/01/03
3.7K0
使用Power Automate在Onedrive for Business中创建空文件夹
Mac在文件夹/终端中打开终端/文件夹
如图,想要在终端中到该文件夹,自然而然的办法是cd /usr/share/doc/postfix/html, 但其实还有更简洁的办法,即如上安装Go2Shell或cd to插件
fliter
2023/06/18
1K0
Mac在文件夹/终端中打开终端/文件夹
在 Linux 中重命名文件夹中的所有文件
在Linux系统中,有时候我们需要批量重命名文件夹中的所有文件,以便更好地组织和管理文件。本文将详细介绍几种在Linux中重命名文件夹中所有文件的方法,包括使用命令行工具和脚本等方式。
网络技术联盟站
2023/06/08
5.1K0
在 Linux 中重命名文件夹中的所有文件
在 MSBuild 编译过程中操作文件和文件夹(检查存在/创建文件夹/读写文件/移动文件/复制文件/删除文件夹)
本文整理 MSBuild 在编译过程中对文件和文件夹处理的各种自带的编译任务(Task)。
walterlv
2023/10/22
3650
如何在Linux中创建文件?多个文件创建操作命令。
如果文件file1.txt不存在,则上面的命令将创建该文件,否则,它将更改其时间戳。
用户5005176
2021/08/10
39.2K0
python 遍历文件夹 查找大文件
import os path = "C:/" #文件夹目录 def eachFile(filepath): fileNames = os.listdir(filepath) # 获取当前路径下的文件名,返回List for file in fileNames: newDir = filepath + '/' + file # 将文件命加入到当前文件路径后面 if os.path.isfile(newDir): # 如果是文件 if os.path.splitext(newDir)[1] == ".txt": # 判断是否是txt size=os.path.getsize(newDir) size=size/(1024*1024) if size>100: print(newDir,size) else: eachFile(newDir) #如果不是文件,递归这个文件夹的路径
用户5760343
2019/07/07
2.8K0
Centos8中如何更改文件夹中多个文件的扩展名
在目录中递归更改文件扩展名的最常见方法是使用 shell 的 for 循环。我们可以使用 shell 脚本提示用户输入目标目录、旧的扩展名和新的扩展名以进行重命名。以下是脚本内容:
用户7639835
2021/09/01
3.7K0
Centos8中如何更改文件夹中多个文件的扩展名
在目录中递归更改文件扩展名的最常见方法是使用 shell 的 for 循环。我们可以使用 shell  提示用户输入目标目录、旧的扩展名和新的扩展名以进行重命名。以下是 内容:
用户1685462
2021/09/05
3.3K0
Centos8中如何更改文件夹中多个文件的扩展名
在目录中递归更改文件扩展名的最常见方法是使用 shell 的 for 循环。我们可以使用 shell 脚本提示用户输入目标目录、旧的扩展名和新的扩展名以进行重命名。以下是脚本内容:
用户9236362
2021/11/30
4K0
mac 在 home 目录下创建文件夹
编译 /etc/auto_master 文件,注释掉或者移除以 /home 开头的那一行,保存。
一个会写诗的程序员
2020/11/26
3.2K0
查找修改时间在指定区间的文件并打包
#!/bin/bash # find file and tar # joyousphper@gmail.com # find_and_tar.sh read -p "Please enter a search path (eg:/root/) >" search_path if [ -d $search_path ];then echo "find path $search_path" else echo "error: $search_path is not a directory" exit 0
苦咖啡
2018/05/08
1.3K0
在pycharm中如何将django中多个app放到同个文件夹apps处理
新建apps文件夹后mark为source目录,然后在Setting中import方式为
Ewdager
2020/07/14
2K0
问与答87: 如何根据列表内容在文件夹中查找图片并复制到另一个文件夹中?
Q:如何实现根据列表内容查找文件夹中的照片,并将照片剪切或复制到另外的文件夹?如下图1所示,在列C中有一系列身份证号。
fanjy
2020/09/25
2.9K0
问与答87: 如何根据列表内容在文件夹中查找图片并复制到另一个文件夹中?
Linux下在文件夹所有文件中查找相关内容
grep是在使用Linux时经常会用到的一个命令了,这个命令平时大都主要用来进行对一段输出的关键字定位,但是这个命令也可以通过使用某些参数来达到文件夹文件内容遍历的效果
impressionyang
2020/08/26
35.9K0
点击加载更多

相似问题

Applescript:在多个文件夹中创建新的文件夹结构

12

在熊猫中查找最接近给定时间的DataFrame行

30

Applescript:创建文件夹/子文件夹并移动多个文件

21

AppleScript查找包含特定文件的文件夹

14

创建文件夹Applescript

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文