专栏首页java干货Spring系列十二:Spring @Required注解

Spring系列十二:Spring @Required注解

无情不似多情苦,一寸还成千万缕。

概述

在生产级应用程序中,IoC容器中可能声明了成百上千个bean,它们之间的依赖关系通常非常复杂。setter注入的一个缺点是,很难检查是否设置了所有必需的属性。使用<bean>”dependency-check”属性,可以检查属性值是否已设置,但不能检查其值是否设置为null或非null值。

除了使用依赖性检查来验证依赖性之外,还可以使用@Required注解来检查设置的值是否为非空值。

@Required注解用法

setter方法上面加上@Required注解

在类文件中的bean属性的setter方法上使用@Required注解,如下所示:

public class EmployeeFactoryBean extends AbstractFactoryBean<Object>
{
    private String designation;
     
    public String getDesignation() {
        return designation;
    }
 
    @Required
    public void setDesignation(String designation) {
        this.designation = designation;
    }
     
    //more code here
}

注册RequiredAnnotationBeanPostProcessor

RequiredAnnotationBeanPostProcessor是一个Spring bean后处理器,用于检查是否已设置所有带有@Required注解的bean属性。要启用此bean后处理器进行属性检查,必须在Spring IoC容器中注册它。

<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />

测试

如果没有设置任何具有@Required的属性,则此bean后处理器将抛出BeanInitializationException。例如,创建EmployeeFactoryBean类的实例而不传递用于指定的属性值,则将收到以下错误。

<bean id="manager"  class="com.howtodoinjava.demo.factory.EmployeeFactoryBean">
    <!-- <property name="designation" value="Manager" /> -->
</bean>
 
<bean class="org.springframework.beans.actory.annotation.RequiredAnnotationBeanPostProcessor" />

抛出以下错误信息:

Caused by: org.springframework.beans.factory.BeanInitializationException: Property 'designation' is required for bean 'manager'
    at org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor.postProcessPropertyValues(RequiredAnnotationBeanPostProcessor.java:156)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    ... 11 more

要纠正此问题,请通过取消注释applicationContext.xml文件中的行来传递指定值。

这样,就可以使用@Required注解和 RequiredAnnotationBeanPostProcessor类来验证在上下文初始化时是否已正确设置了所有必需的bean属性。


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring系列十三:Spring @Scheduled注解

    Spring使用@Scheduled注解为基于cron表达式的任务调度和异步方法执行提供了出色的支持。可以将@Scheduled注解与触发器元数据一起添加到方法...

    java干货
  • Spring系列十一:Spring @Configuration注解

    Spring @Configuration注解有助于基于Spring注解的自动装配。@Configuration注解指示一个类声明了一个或多个@Bean方法,S...

    java干货
  • Spring Boot2 系列教程(二十三)理解 Spring Data Jpa

    有很多读者留言希望松哥能好好聊聊 Spring Data Jpa! 其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因...

    江南一点雨
  • Spring系列十:Spring FactoryBean

    工厂bean是用作在IoC容器中创建其他bean的工厂,但它是特定的Spring的bean。从概念上讲,工厂bean非常类似于工厂方法,可以在bean构造期间由...

    java干货
  • 32天高效突击:开源框架+性能优化+微服务架构+分布式,面阿里获P7(脑图、笔记、面试考点全都有)

    今年似乎因为疫情影响,时间过得特别快,对于需要跳槽换工作的人来,更觉得有些突然,似乎金三银四和金九银四还没开始准备好,就匆匆过去。加上今年的大环境不佳,所以大部...

    Java程序猿阿谷
  • Spring 基于注解(annotation)的配置之@Required注解

    从 Spring 2.5 开始就可以使用注解来配置依赖注入。注解连线在默认情况下在 Spring 容器中不打开。因此,在可以使用基于注解的连线之前,我们将需要在...

    Jerry Wang
  • Spring全解系列 - @Import注解

    @Import是Spring基于 Java 注解配置的主要组成部分。@Import注解提供了@Bean注解的功能,同时还有原来Spring基于 xml 配置文件...

    干货满满张哈希
  • Spring 必知概念(二)

    13、Spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要...

    冷冷
  • 经典Spring面试十题(二)

    原文:https://blog.csdn.net/u012562943/article/details/51397417

    用户5224393
  • Spring系列第十九讲 @Configuration和@Bean注解详解

    @Configuration这个注解可以加在类上,让这个类的功能等同于一个bean xml配置文件,如下:

    易兮科技
  • 调用外部api时的数据一致性问题

    春节又要来了,远行的小伙伴们将开始一场刺激的抢票之旅,关于购票,从程序角度上而言,大致分为这么几步: 1、 检查是否有剩余的票 2、 购票后票数减一 3、...

    java达人
  • Spring系列之新注解配置+Spring集成junit+注解注入

    Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率 你本来要写一段很长的...

    一只胡说八道的猴子
  • Spring系列第十七讲 深入理解Java注解及Spring对注解的增强(上)

    代码中注释大家都熟悉吧,注释是给开发者看的,可以提升代码的可读性和可维护性,但是对于java编译器和虚拟机来说是没有意义的,编译之后的字节码文件中是没有注释信息...

    易兮科技
  • Spring系列第十八讲 深入理解Java注解及Spring对注解的增强(下)

    我们通过@Target元注解的属性值可以看出,这个@Inherited 是专门修饰注解的。

    易兮科技
  • Spring面试27道高频考点,你能答出几道?

    Spring框架是一个为Java应用程序开发提供综合、广泛的基础性支持的Java平台。 Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应...

    挨踢小子部落阁
  • 27道高频Spring面试题,你能答对几个?

    Spring框架是一个为Java应用程序开发提供综合、广泛的基础性支持的Java平台。 Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应...

    程序员追风
  • SpringBoot入门建站全系列(二十五)结合Spring-data-elasticsearch进行全文检索

    ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsear...

    品茗IT
  • Spring面试问答Top 25

    本人收集了一些在大家在面试时被经常问及的关于Spring的主要问题,这些问题有可能在你下次面试时就会被问到。对于本文中未提及的Spring其他模块,我会单独分享...

    哲洛不闹
  • 初识SpringBoot

    在日常开发中,我们通常会选择SpringMVC + Maven的方式去构建一个web项目,需要配置各种xml文件非常耗时,大概的构建步骤如下:

    会说话的丶猫

扫码关注云+社区

领取腾讯云代金券