- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这里是代码示例列表:
基础
@Validated
@Component
public class MyImpl1 {}
@Validated
@Component
public class MyImpl2 {}
@Service
public MySelector {
private final MyImpl1 myImpl1;
private final MyImpl2 myImpl2;
@Autowired
public MySelector(MyImpl1 myImpl1, MyImpl2 myImpl2) {
this.myImpl1 = myImpl1;
this.myImpl2 = myImpl2;
}
public Object select (Long id) {
switch (id) {
case 1:
return myImpl1;
case 2:
return myImpl1;
}
}
}
这有效:bean 被注入(inject),这里没有问题。这里重要的注意事项是 MyImpl
beans 是代理,这是否 Autowiring 的问题。
但是当我像这样添加implements
时,事情会变得不同:
实现
@Validated
@Component
public class MyImpl1 implements MyInterface{}
@Validated
@Component
public class MyImpl2 implements MyInterface{}
public interface MyInterface {}
@Service
public MySelector {
private final MyImpl1 myImpl1;
private final MyImpl2 myImpl2;
@Autowired
public MySelector(MyImpl1 myImpl1, MyImpl2 myImpl2) {
this.myImpl1 = myImpl1;
this.myImpl2 = myImpl2;
}
public Object select (Long id) {
switch (id) {
case 1:
return myImpl1;
case 2:
return myImpl2;
}
}
}
我得到了:
Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'myImpl1' is expected to be of type 'MyImpl1' but was actually of type 'com.sun.proxy.$Proxy108'
如果我删除@Validated
前夕让我们重新开始工作。
据我了解,spring使用代理,最好使用接口(interface)。但我不明白为什么我在这里遇到问题?如果 spring 可以通过类名 Autowiring 代理,为什么在添加 implements
时它不能执行此操作,特别是当 Autowiring 字段中未使用此接口(interface)时。
已更新
Spring-boot版本是2.0.3
spring-core 版本是 5.0.7.RELEASE
最佳答案
With interfaces JDK dynamic proxies (interface based) are use, else you are using class based proxies. Newer Spring Boot versions force always to use class based proxies. Either way it uses proxies but with interfaces it uses interface only proxies and else uses class based (CGLIB) proxies.
确实如此,添加接口(interface)会导致jdk代理不是原始类的子类。
要强制子类代理子类,请将以下内容添加到 bean 声明中:
@Scope( proxyMode = ScopedProxyMode.TARGET_CLASS )
例如:
@Validated
@Component
@Scope( proxyMode = ScopedProxyMode.TARGET_CLASS )
public class MyImpl2 implements MyInterface{}
关于java - 为什么 @Validated + @Component + Implement 会在 Spring Boot 中导致类型误导性错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54087873/
我经常在 C 标准文档中看到“实现定义”的说法,并且非常将其作为答案。 然后我在 C99 标准中搜索它,并且: ISO/IEC 9899/1999 (C99) 中第 §3.12 条规定: 3.12 I
“依赖于实现”中的“实现”是什么意思? “依赖于实现”和“依赖于机器”之间有什么区别? 我使用C,所以你可以用C解释它。 最佳答案 当 C 标准讨论实现时,它指的是 C 语言的实现。因此,C 的实现就
我刚刚在 Android-studio 中导入了我的项目,并试图在其中创建一个新的 Activity。但我无法在 android-studio 中创建 Activity 。我指的是here我看不到将目
我想知道您对为什么会发生此错误的意见。在陆上生产环境中,我们使用 CDH4。在我们的本地测试环境中,我们只使用 Apache Hadoop v2.2.0。当我运行在 CDH4 上编译的同一个 jar
我正在尝试集成第三方 SDK (DeepAR)。但是当我构建它时,它会显示一个错误。我试图修复它。如果我创建一个简单的新项目,它就可以正常工作。但是我现有的应用程序我使用相机和 ndk。请帮我找出错误
我很好奇为什么我们有 @Overrides 注释,但接口(interface)没有类似的习惯用法(例如 @Implements 或 @Implementation)。这似乎是一个有用的功能,因为您可能
我对 DAODatabase(适用于 Oracle 11 xe)的 CRUD 方法的实现感到困惑。问题是,在通常存储到 Map 集合的情况下,“U”方法(更新)会插入新元素或更新它(像 ID:Abst
Java-API 告诉我特定类实现了哪些接口(interface)。但有两种不同类型的信息,我不太确定这意味着什么。例如,对于“TreeSet”类:https://docs.oracle.com/en
我有一个接口(interface) MLService,它具有与机器学习算法的训练和交叉验证相关的基本方法,我必须添加两个接口(interface)分类和预测,它们将实现 MLService 并包含根
我一直想知道如何最好地为所有实现相同接口(interface)的类系列实现 equals()(并且客户端应该只使用所述接口(interface)并且永远不知道实现类)。 我还没有编写自己的具体示例,但
我有一个接口(interface)及其 2 个或更多实现, public interface IProcessor { default void method1() { //logic
我有同一个应用程序的免费版和高级版(几乎相同的代码,相同的类,到处都是“if”, list 中的不同包, list 中的进程名称相同)。主要 Activity 使用 IMPLICIT Intent 调
这是我为我的应用程序中的错误部分编写的代码 - (id)initWithData:(NSData *)data <-------- options:(NSUInteger)opti
请查找随附的代码片段。我正在使用此代码将文件从 hdfs 下载到我的本地文件系统 - Configuration conf = new Configuration(); FileSys
我想在 MongoDB 中使用 Grails2.5 中的“ElasticSearch”插件。我的“BuildConfig.groovy”文件是: grails.servlet.version = "3
我收到一条错误消息: fatal error: init(coder:) has not been implemented 对于我的自定义 UITableViewCell。该单元格未注册,在 Stor
得到这个错误 kotlin.NotImplementedError: An operation is not implemented: not implemented 我正在实现一个 ImageBut
typedef int Element; typedef struct { Element *stack; int max_size; int top; } Stack; //
Playground 代码 here 例子: interface IFoo { bar: number; foo?: () => void; } abstract class Abst
我想知道如何抑制警告: Category is implementing a method which will also be implemented by its primary class. 我
我是一名优秀的程序员,十分优秀!