Spring Boot中Java私有方法作为Runnable传入服务类的运行原理
为什么Lambda调用私有方法能在外部服务类中正常执行?
你在Spring Boot测试类中定义了私有方法,通过Lambda传入外部服务类执行却成功了,核心原因在于Lambda的作用域与Java的私有访问规则:
代码示例
@SpringBootTest public class MyTest { private void myPrivateMethod() { // Some code here } @Autowired private MyService myService; @Test public void myTest() { myService.runRunnable(() -> myPrivateMethod()); } } @Service public class MyService { public void runRunnable(Runnable r) { r.run(); } }
关键解释
- Lambda的作用域属于定义它的类:
() -> myPrivateMethod()是在MyTest的myTest方法内部定义的,属于MyTest类的上下文范围,因此完全有权限访问MyTest的私有方法myPrivateMethod。 - 外部类并未直接访问私有方法:
MyService只是接收并执行了Runnable对象,并没有直接去调用MyTest的私有方法。真正执行myPrivateMethod的是Lambda本身,而Lambda的执行依然处于MyTest的访问权限范围内。 - Java私有访问是类级别的限制:只要代码属于同一个类的内部(包括类内定义的Lambda、内部类、局部类等),就可以访问该类的私有成员,不管这段代码最终被哪个外部类触发执行。
内容的提问来源于stack exchange,提问作者Furkan Aksit
相关产品推荐
相关产品推荐

