典数式编程经函示例

本文探讨了Java中的函数式编程如何简化代码逻辑,以Spring为例,展示了在doGetBean方法中如何使用λ表达式。文章详细解释了getSingleton方法中的λ表达式如何作为ObjectFactory接口的实现,强调了接口设计的重要性。同时,推荐了一个详细的博客资源供读者深入学习。
摘要由CSDN通过智能技术生成

前言

函数式编程在java中算是一大进步,个人认为这样子编程使得编写逻辑的位置更加灵活,并且不用去为了实现一个简单的接口而去创建实现类。当接口设计不好的时候,整个实现类代码体系也是异常庞大的

经典示例

这里要请出spring大佬来给我们做一下详细演示。
具体是在doGetBean这个方法中,创建SpringBean的时候就可以看到。下面贴出部分代码

protected <T> T doGetBean(
			String name, @Nullable Class<T> requiredType, @Nullable Object[] args, boolean typeCheckOnly)
			throws BeansException {
	//此处省略
if (mbd.isSingleton()) {
		sharedInstance = getSingleton(beanName, () -> {
			try {
				return createBean(beanName, mbd, args);
			}
			catch (BeansException ex) {
				// Explicitly remove instance from singleton cache: It might have been put there
				// eagerly by the creation process, to allow for circular reference resolution.
				// Also remove any beans that received a temporary reference to the bean.
				destroySingleton(beanName);
				throw ex;
			}
		});
 bean = getObjectForBeanInstance(sharedInstance, name, beanName, mbd);
				}
	//此处省略
	}

这段代码大家都不陌生,重点就是要看这个getSingleton方法中的λ表达式

进入getSingleton方法

public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) { 
//无关逻辑代码
try {
			singletonObject = singletonFactory.getObject();
			newSingleton = true;
		}
//无关逻辑代码
}

当这段代码执行的时候,通过断点就会进入第一段代码中λ表达式( ()-> )中。

查看getSingleton方法中ObjectFactory<?> singletonFactory参数类型。可以发现这是一个函数式接口,并且存在一个被实现方法getObject().

@FunctionalInterface
public interface ObjectFactory<T> {
	/**
	 * Return an instance (possibly shared or independent)
	 * of the object managed by this factory.
	 * @return the resulting instance
	 * @throws BeansException in case of creation errors
	 */
	T getObject() throws BeansException;
}

那么就可以知道,λ表达式中的处理逻辑其实就是接口方法的实现。

注意:具体使用参照这个博主写的还是挺全面的https://blog.csdn.net/zhanghua850127/article/details/100511618。再者就是尽量让这个接口扮演顶级接口角色。spring的实现就是很好的典例。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值