- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Spring 框架的新手,我在理解 @Required
时遇到了问题。注释与 Java 配置的应用程序相结合。
这是一个例子。
配置文件
@Configuration
public class AppConfig {
@Bean
public Movie movieA() {
return new Movie();
}
@Bean
public MovieHolder holder() {
return new MovieHolder();
}
}
public class MovieHolder {
private Movie movie;
public Movie getMovie() {
return movie;
}
@Required
public void setMovie(Movie movie) {
this.movie = movie;
}
}
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MovieHolder holder = (MovieHolder) context.getBean("holder");
System.out.println("movie: " + holder.getMovie());
@Required
的文档注释,应该有一个异常(exception),因为电影不是直接设置的,也不是通过 Autowiring 的。取而代之的是输出
movie: null
.
@Required
的正确用法吗?注解?
最佳答案
在您正在实例化的 bean 中设置所需的属性是您自己的责任。 BeanPostProcessor
处理用 @Configuration
注释的类中的 bean 定义被称为 ConfigurationClassPostProcessor
. BeanPostProcessor
处理您的 @Required
注释默认为 RequiredAnnotationBeanPostProcessor
, 使用 context:annotation-config
时默认注册和 context:component-scan
在您的配置中。如果你没有使用这两个标签,你甚至可以注册自己的 RequiredAnnotationBeanPostProcessor
作为 bean
.
现在, RequiredAnnotationBeanPostProcessor
的默认实现有一个方法叫 boolean shouldSkip(..)
检查名为 SKIP_REQUIRED_CHECK_ATTRIBUTE
的 bool 属性. RequiredAnnotationBeanPostProcessor
在后处理期间为每个 bean 检查此属性的值。 .如果返回 false
, @Required
强制执行约束,否则不执行。
现在, ConfigurationClassPostProcessor
将此属性的值设置为 true
从 @Configuration
创建 bean 定义时类(我猜是因为如果你定义一个 bean,你应该确保它具有所需的属性)。因此,@Required
不对此类 bean 强制执行。
顺便说一句,您可能会认为这是在哪里做的 SKIP_REQUIRED_CHECK_ATTRIBUTE
属性来自哪里以及它在哪里设置:它设置在 BeanDefinition
的实例上Spring 在内部使用它们来创建 bean 和进行后处理。
如果你真的想强制执行 @Required
约束,您必须覆盖 RequiredAnnotationBeanPostProcessor
,覆盖 boolean shouldSkip(..)
方法并注册这个类而不是默认的 RequiredAnnotationBeanPostProcessor
.而作为 RequiredAnnotationBeanPostProcessor
的文档说:
A default RequiredAnnotationBeanPostProcessor will be registered by the "context:annotation-config" and "context:component-scan" XML tags. Remove or turn off the default annotation configuration there if you intend to specify a custom RequiredAnnotationBeanPostProcessor bean definition.
initMethod
您的
@Bean
上的属性注解。哪个可以执行检查以查看确实设置了所需的属性。但是,由于这是基于代码的配置,您也可以将其称为
init
自己方法。
RequiredAnnotationBeanPostProcessor
经历很多麻烦没有多大意义。 ,如以下文档所述:
Please note that an 'init' method may still need to implemented (and may still be desirable), because all that this class does is enforce that a 'required' property has actually been configured with a value. It does not check anything else... In particular, it does not check that a configured value is not null.
@Required
不适用于
@Configuration
默认的类。如果您需要确保设置所有属性,您也可以在
@Bean
中创建 bean 时自己完成。方法(通过调用一些执行此类验证的
init
方法,或者只是自己提供所需的属性)。如果你真的需要制作
@Required
注释工作,您需要使用自己的
RequiredAnnotationBeanPostProcessor
实现,在spring上下文中注册为bean,放弃
context:annotation-config
的好处.
关于spring - @Required 注释如何与 JavaConfig 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16769360/
Java 在 JSR-330 中添加了官方依赖注入(inject)支持,例如 @Inject、@Named 等。这些可以与 Spring 或 Guice 等不同的框架一起使用。 Spring 还提供了
浏览 Spring Javaconfig 引用文档 http://docs.spring.io/spring-framework/docs/current/spring-framework-refer
什么是 JavaConfig 等价物? 尝试像这样声明它,但它仅充当单例 @Bean public CheckOutCounter checkOutCounter(){
找不到错误(( Spring MVC + Hibernate,JavaConfig WebAppConfig: package com.sprhib.init; import java.util.Pr
我在配置camel以使用java配置与mavencamel:run插件时遇到问题。 这是插件 xml: org.apache.camel
我编写了一个调度程序,它仅在处理 xml 文件时才能按预期工作。但我无法使用 Javaconfig 类运行它。以下是代码。 调度程序: public class DemoServiceBasicUsa
我们正在尝试将 AspectJ @Aspect 实现到我们现有的软件中,以便在进行服务调用后执行一些代码。 注意: 我们的服务接口(interface)和实现是@Autowired通过其余 Contr
有多个用@Configuration 注释的类,我想在顶级配置组件中决定在上下文中注册哪一个。 @Configuration public class FileSystemDataStoreConfi
这个问题在这里已经有了答案: Spring: @Component versus @Bean (16 个答案) 关闭 8 年前。 在 JavaConfig 中定义一个 bean 与仅仅注释一个类有何
这个问题在这里已经有了答案: How to import Java-config class into XML-config so that both contexts have beans? (3
Spring 大约需要 5 到 10 秒来自行配置,我将 XML 用于基础结构 bean,并使用带有注释的组件扫描来处理其他所有内容。 Spring JavaConfig 是否消除了组件扫描的需要以及
我有一个问题要解决:1)我们的项目使用 Spring JavaConfig 方法(所以没有 xml 文件)2)我需要创建自定义范围,xml中的示例如下所示:
我是 Spring 框架的新手,我在理解 @Required 时遇到了问题。注释与 Java 配置的应用程序相结合。 这是一个例子。 配置文件 @Configuration public class
我最近正在使用 spring data jpa 开发 spring web 应用程序 我在持久性配置方面遇到问题: @Configuration @EnableTransactionManagemen
我正在尝试设置一个在我的 Spring WebMVCConfig 中未找到的页面,它无法正常工作.. 这是我的配置: @Configuration @EnableWebMvc @PropertySou
我对 Spring 框架还很陌生,在理解 @Required 注释与 Java 配置的应用程序结合使用时遇到了问题。 这是一个示例。 配置文件 @Configuration public class
我们的 Spring 配置包含大约 1200 个 bean,我们使用 component-scan/@Autowired。如果我们将 ApplicationContext 导出为 Xml(并且仍然使用
目前我有一个加载属性文件的 Spring xml 配置(Spring 4)。 上下文属性 my.app.service = myService my.app.other = ${my.app.serv
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我正在将一些现有的 xml 配置转移到 Spring 的 Java 配置。在这个过程中,我遇到了一些被转移的Java代码,抛出一个checked Exception . @Bean public Po
我是一名优秀的程序员,十分优秀!