逛spring源码所发现的有趣的写法。

本文介绍Spring框架中DefaultListableBeanFactory类的有趣实现。通过使用Java 8的函数式接口,如Consumer和Predicate,该实现允许方法调用者自定义方法的行为,从而提高代码的灵活性。
摘要由CSDN通过智能技术生成

逛spring源码所发现的有趣的写法。

  • 今日逛spring源码发现在DefaultListableBeanFactory类发现有两个方法写的挺有趣,利用函数式接口,让方法的执行逻辑交给方法调用者来决定,提高了代码的灵活性。特此记录,代码如下:
	private void removeManualSingletonName(String beanName) {
		updateManualSingletonNames(set -> set.remove(beanName), set -> set.contains(beanName));
	}

	/**
	 * Update the factory's internal set of manual singleton names.
	 * @param action the modification action
	 * @param condition a precondition for the modification action
	 * (if this condition does not apply, the action can be skipped)
	 */
	private void updateManualSingletonNames(Consumer<Set<String>> action, Predicate<Set<String>> condition) {
		if (hasBeanCreationStarted()) {
			// Cannot modify startup-time collection elements anymore (for stable iteration)
			synchronized (this.beanDefinitionMap) {
				if (condition.test(this.manualSingletonNames)) {
					Set<String> updatedSingletons = new LinkedHashSet<>(this.manualSingletonNames);
					action.accept(updatedSingletons);
					this.manualSingletonNames = updatedSingletons;
				}
			}
		}
		else {
			// Still in startup registration phase
			if (condition.test(this.manualSingletonNames)) {
				action.accept(this.manualSingletonNames);
			}
		}
	}
  • 以下是自己模拟的代码:
package lambda.test;

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Predicate;

/**
 * @author : HY
 * @version : V1.0
 * @ClassName : MethodLambdaTest
 * @Description:
 * @date : 2022/1/18 16:04
 */
public class MethodLambdaTest {

    private static Set set = new HashSet();


    static{
        set.add("1");
        set.add("2");
    }


    public static void main(String[] args) {
        MethodLambdaTest methodLambdaTest = new MethodLambdaTest();
        methodLambdaTest.doSome(System.out::println, b -> b.contains("1"));
    }

    public void doSome(Consumer<Set<String>> action, Predicate<Set<String>> condition) {
        Set<String> updatedSingletons = new LinkedHashSet<>(set);
        if (condition.test(updatedSingletons)) {
            action.accept(updatedSingletons);
        }
    }
}

输出:
在这里插入图片描述
非常好用
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值