Spring 实现给Bean属性注入null值

 更新时间:2021年08月28日 10:06:28   作者:xiaojia1100  
这篇文章主要介绍了Spring 实现给Bean属性注入null值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

给Bean属性注入null值

空字符串值可以使用<value/>元素可用来表示。例如:

<bean class="ExampleBean">
  <property name="email"><value/></property>
</bean>

等同于Java代码: exampleBean.setEmail("")。

null值则可以使用<null/>元素可用来表示。例如:

<bean class="ExampleBean">
  <property name="email"><null/></property>
</bean>

等同于Java代码:exampleBean.setEmail(null)。

Spring注入bean 为null的相关问题

问题描述

有一个类注入 发现里面的MongoLogInfoDAO始终为null

@Component("countFunction")
public class CountFunction implements AviatorFunction {    
    @Resource(name = "mongoLogInfoDAO")
    private MongoLogInfoDAO mongoLogInfoDAO;
 
    @Override
    public String getName() {
        return "count";
    }

原因是竟然是因为使用了 new 方式使用 CountFunction 导致类中的mongoLogInfoDao 无法注入

AviatorEvaluator.addFunction(new CountFunction());

这个是不对的, 为啥?

这个对象是你new出来的 ,不是spring创建的 当然无法DI依赖注入

反之,如果你这个Bean是交易Spring IOC 容器管理的,那也应该报错NoSuchBeanDefinitionException异常

如何处理?

应对这个问题的最好办法是 不要new

还有一种情况spring 注入的时候是null

问题描述

@Component("functionExecutor")
public class FunctionExecutor {
    protected static final Loggerx LOGGER = Loggerx.getLogger("system");
 
    @Resource(name = "mongoDAO")
    private MongoDAO mongoDAO;
 
    @Resource(name = "prism4001Producer")
    private SmartMQProducer prism4001Producer;
    
    @Resource(name = "whereGreaterThenFunction")
    private  WhereGreaterThenFunction whereGreaterThenFunction;
    
    @Resource(name = "countFunction")
    private  CountFunction countFunction;
    
    @Resource(name = "devideFunction")
    private  DevideFunction devideFunction;
    
    @Resource(name = "selectFunction")
    private  SelectFunction selectFunction;
    
    @Resource(name = "whereEqualFunction")
    private  WhereEqualFunction whereEqualFunction;
    
    @Resource(name = "timeFunction")
    private  TimeFunction timeFunction;
    
    @Resource(name = "whereLessThenFunction")
    private  WhereLessThenFunction whereLessThenFunction;
    
    @Resource(name = "whereGreaterThenEqualFunction")
    private  WhereGreaterThenEqualFunction whereGreaterThenEqualFunction;
    
    @Resource(name = "whereInFunction")
    private  WhereInFunction whereInFunction;
    
    @Resource(name = "greaterThenFunction")
    private  GreaterThenFunction greaterThenFunction;
    
    @Resource(name = "regexFunction")
    private  RegexFunction regexFunction;
    
    @Resource(name = "maxFunction")
    private  MaxFunction maxFunction;
    
    @Resource(name = "minFunction")
    private  MinFunction minFunction;
    
    @Resource(name = "equalFunction")
    private  EqualFunction equalFunction;
    
    @Resource(name = "lessThenEqualFunction")
    private  LessThenEqualFunction lessThenEqualFunction;
    
    @Resource(name = "lessThenFunction")
    private  LessThenFunction lessThenFunction;
    
    @Resource(name = "plusFunction")
    private  PlusFunction plusFunction;
    
    @Resource(name = "multiFunction")
    private  MultiFunction multiFunction;
    
    @Resource(name = "notEqualFunction")
    private  NotEqualFunction notEqualFunction;
    
    @Resource(name = "whereNotInFunction")
    private  WhereNotInFunction whereNotInFunction;
    
    @Resource(name = "sumFunction")
    private  SumFunction sumFunction;
    
    @Resource(name = "minusFunction")
    private  MinusFunction minusFunction;
    
   {
        AviatorEvaluator.addFunction(whereGreaterThenFunction);
        AviatorEvaluator.addFunction(countFunction);
        AviatorEvaluator.addFunction(devideFunction);
        AviatorEvaluator.addFunction(selectFunction);
        AviatorEvaluator.addFunction(whereEqualFunction);
        AviatorEvaluator.addFunction(timeFunction);
        AviatorEvaluator.addFunction(whereLessThenFunction);
        AviatorEvaluator.addFunction(whereGreaterThenEqualFunction);
        AviatorEvaluator.addFunction(whereInFunction);
        AviatorEvaluator.addFunction(greaterThenFunction);
        AviatorEvaluator.addFunction(regexFunction);
        AviatorEvaluator.addFunction(maxFunction);
        AviatorEvaluator.addFunction(minFunction);
        AviatorEvaluator.addFunction(equalFunction);
        AviatorEvaluator.addFunction(lessThenEqualFunction);
        AviatorEvaluator.addFunction(lessThenFunction);
        AviatorEvaluator.addFunction(plusFunction);
        AviatorEvaluator.addFunction(multiFunction);
        AviatorEvaluator.addFunction(notEqualFunction);
        AviatorEvaluator.addFunction(whereNotInFunction);
        AviatorEvaluator.addFunction(sumFunction);
        AviatorEvaluator.addFunction(minusFunction);
    }

容器加载这个functionExecutor这个bean的时候,走到静态代码块发现注入的sumFunction ,minusFunction都是null

这个是为什么呢?

spring 执行代码块的时候,其他的bean 还未注入,会导致注入的bean 是null

如何处理?

如果你想 当spring加载 bean 初始化完成之后,自动执行一些初始化方法

使用

@PostConstruct

注解可以实现

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • idea运行jsp文件的时候显示404问题及解决

    idea运行jsp文件的时候显示404问题及解决

    这篇文章主要介绍了idea运行jsp文件的时候显示404问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Java注解@Transactional事务类内调用不生效问题及解决办法

    Java注解@Transactional事务类内调用不生效问题及解决办法

    这篇文章主要介绍了Java注解@Transactional事务类内调用不生效问题及解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 谈谈为JAXB和response设置编码,解决wechat4j中文乱码的问题

    谈谈为JAXB和response设置编码,解决wechat4j中文乱码的问题

    中文乱码是每个程序员都会遇到的问题,本篇文章主要介绍了谈谈为JAXB和response设置编码,解决wechat4j中文乱码的问题,具有一定的参考价值,有兴趣的可以了解一下。
    2016-12-12
  • mybatis-plus逻辑删除与唯一约束冲突问题

    mybatis-plus逻辑删除与唯一约束冲突问题

    本文探讨了MyBatis-Plus逻辑删除与唯一约束冲突的问题,分析了产生冲突的原因,并提出了解决方案,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • 浅谈线程的几种可用状态

    浅谈线程的几种可用状态

    下面小编就为大家带来一篇浅谈线程的几种可用状态。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 一文搞懂Java中对象池的实现

    一文搞懂Java中对象池的实现

    池化并不是什么新鲜的技术,它更像一种软件设计模式,主要功能是缓存一组已经初始化的对象,以供随时可以使用。本文将为大家详细讲讲Java中对象池的实现,需要的可以参考一下
    2022-07-07
  • Java_Spring之Spring5 的新特性

    Java_Spring之Spring5 的新特性

    这篇文章主要介绍了Java_Spring中Spring5 的新特性,需要利用jdk8 版本更新的内容,依赖库更新,感兴趣的小伙伴可以参考阅读
    2023-04-04
  • Mybatis-plus中的@EnumValue注解使用详解

    Mybatis-plus中的@EnumValue注解使用详解

    这篇文章主要介绍了Mybatis-plus中的@EnumValue注解使用详解,在PO类中,如果我们直接使用枚举类型去映射数据库的对应字段保存时,往往就会因为类型不匹配导致映射失败,Mybatis-plus提供了一种解决办法,就是使用@EnumValue注解,需要的朋友可以参考下
    2024-02-02
  • idea2020.1无法自动加载maven依赖的jar包问题及解决方法

    idea2020.1无法自动加载maven依赖的jar包问题及解决方法

    这篇文章主要介绍了idea2020.1无法自动加载maven依赖的jar包问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 完整java开发中JDBC连接数据库代码和步骤

    完整java开发中JDBC连接数据库代码和步骤

    这篇文章主要介绍了完整java开发中JDBC连接数据库代码和步骤,需要的朋友可以参考下
    2015-09-09

最新评论