如何注入Spring的Validator实现?

时间:2016-09-15 18:48:20

标签: spring validation spring-mvc jhipster spring-validator

我开始使用JHipster v.3.5.1生成我的应用程序。

一段时间后,我需要创建验证器,以便在使用POST创建实体时对我的实体执行某些业务逻辑验证。所以我做了:

@Component
public class MyValidator implements Validator

然后,我尝试将它注入我的控制器(用@RestController注释),但无论我尝试哪种方式,它总是会产生类似的结果:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.my.app.service.domain.MyValidator] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.

我尝试创建bean并注入它的方式

@Autowired
private MyValidator myValidator;

@Inject
private MyValidator myValidator;

@Autowired
@Qualifier("myValidator")
private MyValidator myValidator; (with @Component("myValidator") on class)

@Inject
@Qualifier("myValidator")
private MyValidator myValidator; (with @Component("myValidator") on class)

//Below was inserted in class annotated with @Configuration
@Bean
public MyValidator myValidator() {
   return new MyValidator();
}

然而我尝试过 - 它失败了。我总是得到NoSuchBeanDefinitionException或字段值被设置为null。

我还检查了项目结构中的班级位置。为了100%确定它的位置,我已将它与@Services打包在一起,它们被扫描并且运行良好。没效果。

我知道这似乎是非常容易的任务,我知道这种注射是可能的(我已经看到它在我的工作项目中完成),但不知怎的,我无法在我的项目中使它工作。 / p>

也许我在配置中缺少一些东西?感谢您的帮助:))

1 个答案:

答案 0 :(得分:0)

我相信你的问题是,当你在一个用@Configuration注释的类中使用@Autowired时,你只是引用一个在一个单独的配置文件中定义的bean,也就是说它必须在另一个文件中使用@Configuration注释。

如果你想引用引用另一个隐式bean,比如用@Component注释的验证器,你需要在另一个隐式bean中进行操作,这个bean也用隐式表示法注释,如@ Component,@ Service,@ Controller等< / p> 除非你有多个类实现相同的接口,否则单独的@Autowired应该可以工作。那时你需要使用@Qualifier。