我已经尝试了几种方法来将依赖项注入我的ConstraintValidator
实现中,但没有任何效果。我已经尝试了几乎所有的stackoverflow线程。我正在使用HiberNate Validator来实现自定义验证。我希望FileService
被注入ApiMock
简单的@Autowired
注释和构造函数注入:
@Component
public class ApiMockResponseValidator
implements ConstraintValidator<MockResponse, ApiMockResponse> {
@Autowired
FileService fileService;
private boolean validate(....) {
// logic
}
@Override
public boolean isValid(ApiMockResponse mockResponse, ConstraintValidatorContext context) {
System.out.println("\n\n --- " + fileService + " --- \n\n"); // remains null
// validate()
}
}
我只通过构造函数注入和删除
@Component
尝试了这一点,但没有任何效果,验证程序也没有实例化。简单<code>@Autowired</code>不注入依赖项,构造函数Autowired给出
Caused by: javax.validation.ValidationException: HV000064: Unable to instantiate ConstraintValidator: com.lendin.ib.utils.validator.ApiMockResponseValidator.
at org.hibernate.validator.internal.util.privilegedactions.NewInstance.run(NewInstance.java:44)
...
...
Caused by: java.lang.NoSuchMethodException: com.test.ApiMockResponseValidator.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
@Configuration
public class ValidatorConfig {
@Bean
@Autowired
public Validator validator(AutowireCapableBeanFactory autowireCapableBeanFactory) {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class).configure()
.constraintValidatorFactory(
new SpringConstraintValidatorFactory(autowireCapableBeanFactory))
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
return validator;
}
}
即使在此之后,<code>fileService</code>也为空。
@Configuration
public class ValidatorConfig {
@Bean
@Primary
@Autowired
public Validator validator(final AutowireCapableBeanFactory autowireCapableBeanFactory) {
new SpringConstraintValidatorFactory(autowireCapableBeanFactory);
LocalValidatorFactoryBean x = new LocalValidatorFactoryBean();
x.setConstraintValidatorFactory(
new SpringConstraintValidatorFactory(autowireCapableBeanFactory));
return x;
}
}
这也无济于事,
fileService
为空。
有什么方法可以实现注入依赖吗?
我知道,如果<code>SpringConstraintValidatorFactory</code>可以实例化<code>ConstraintValidator</code>实现,Hibernate可以使用它而不是实例化实现本身,那么它就可以工作。
我有同样的问题,它解决了添加这在application.properties:
spring.jpa.properties.javax.persistence.validation.mode=none
在这里找到解决方案
如果 ConstraintValidator 实例是在 Spring 范围之外创建的(也许 Hibernate 就是这样做的),则依赖注入不受 Spring 管理。
作为一种变通方法,您可以创建一个< code>FileServiceHolder作为单例
class FileServiceHolder {
private static final FileServiceHolder INSTANCE = new FileServiceHolder();
private FileService fileService;
private FileServiceHolder() {
}
public static FileServiceHolder getInstance() {
return INSTANCE;
}
@Autowired
public setFileService(FileService fileService) {
this.fileService = fileService;
}
}
在配置
类中,从该单例创建一个 bean
@Configuration
class AppConfig {
@Bean
FileServiceHolder fileServiceHolder() {
return FileServiceHolder.getInstance();
}
}
将同一对象(singleton)作为bean公开,使得Spring可以注入依赖项。这是通过setter方法<code>setFileService</code>完成的。
现在在你的 Validator
类中,你可以通过 FileServiceHolder
访问 FileService
。
class Validator {
boolean validate(....) {
FileServiceHolder.getInstance().doStuff();
}
}
问题内容: 我想将依赖项注入。但是,我的方法不起作用。我可以看到Spring正在调用我的setter方法,但是稍后在调用when时,该属性为。 这是我的设置: ServletContextListener: web.xml :(这是文件中的最后一个侦听器) applicationContext.xml: 输出: 实现此目的的正确方法是什么? 问题答案: 我通过删除侦听器bean并为我的属性创建了一
我正在创建一个带有注释的豆子。 我遇到以下异常 无法自动连线字段:private java.util.ArrayList com.mypackage.MyClass.myFriends;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到 [java.util.ArrayList] 类型的匹配 bean,
问题内容: 我试图将Spring依赖项注入到JPA EntityListener中。这是我的侦听器类: 这是我的Entity类: 但是,我的依赖项(即)始终为null。 问题答案: 注入对无状态bean的依赖关系的一种方法是将依赖关系定义为“静态”,创建一个setter方法,以便Spring可以注入依赖关系(将其分配给静态依赖关系)。 将依赖项声明为静态。 创建一个方法,以便Spring可以注入它
有人能帮忙吗?
本文向大家介绍asp.net-core 将依赖项注入Controller Action,包括了asp.net-core 将依赖项注入Controller Action的使用技巧和注意事项,需要的朋友参考一下 示例 鲜为人知的内置功能是使用的Controller Action注入FromServicesAttribute。 重要说明是,[FromServices] 不能将其用作常规的“属性注入”或“
我只是从喷气背包和剑柄开始。但是当我注入到ViewModel中时,我遇到了一些问题。 我得到的错误: 我可以在活动中注入所有细节,但不能在ViewModel中注入。我已经尝试了所有我能找到的解决办法。 我的gradle文件: 项目根级别: 模块级: 我的申请文件 我的模块文件: 项目是具有可组合屏幕的单个活动,因此主要活动: 视图模型: 我尝试过的事情: 改为ViewModelComponent而