首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java 10进行分级(Spring能够扫描模块类,即使包未导出)

使用Java 10进行分级(Spring能够扫描模块类,即使包未导出)
EN

Stack Overflow用户
提问于 2018-08-22 19:07:40
回答 1查看 435关注 0票数 4

所以我和Gradle一起玩Spring和Java 10。

在我的应用程序中,我创建了两个模块

  • 用户界面
  • 应用程序

应用程序模块的gradle文件如下所示

代码语言:javascript
复制
dependencies {
    compile project (':ui')
}

模块信息文件如下所示

代码语言:javascript
复制
module application {
    requires spring.context;
    requires spring.boot.autoconfigure;
    requires spring.boot;
}

在我的UI模块中,build.gradle如下所示

代码语言:javascript
复制
dependencies {
    compile('com.vaadin:vaadin-spring-boot-starter')
}

dependencyManagement {
    imports {
        mavenBom "com.vaadin:vaadin-bom:${vaadinVersion}"
    }
}

模块-info看起来像这样

代码语言:javascript
复制
module ui {
    requires vaadin.server;
    requires vaadin.spring;
}

所以我的UI代码住在ui模块中。如您所见,我不从ui模块导出任何包,应用程序的模块-info也不需要ui。

在我添加的主要课程中

代码语言:javascript
复制
@ComponentScan("com.factory_manager")

神奇的是,它能够扫描UI模块和vaadin UI类,并且我能够通过它们各自的端点访问它们。

据我所知,应用程序模块不应该能够读取ui模块的类,因为我不会导出任何外部包。

有人知道spring是如何神奇地扫描ui模块并找到ui类的吗?

是的,我无法访问应用程序模块中的UI模块类,但是spring可以.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-22 19:15:58

不是很具体的等级,但可能的原因是你的依赖代码-

代码语言:javascript
复制
dependencies {
    compile project (':ui')
} 

因此,ui模块类出现在类路径上,而不是模块路径上,并且在未命名模块下面。

为了进一步关联,未命名的模块导出其所有包,因此您可以访问这些类而不导出它们。

最重要的是,有一种方法你可以证实这一点,那就是,试一试-

代码语言:javascript
复制
<yourClassFromUIModule>.class.getModule().isNamed(); //should return false
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51973577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档