Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包递归类访问_Java_Spring - Fatal编程技术网

Java 包递归类访问

Java 包递归类访问,java,spring,Java,Spring,我正在基于以下结构的spring创建一个库(jar): com.mycompany.mylib/ 外部api/ 内部对象/ 内部类/ 外部api中的类使用内部-*包中的类 如何使客户端只能看到外部api包?普通JAR文件不支持包级模块化。您所能做的就是在.internal…..*包中将类设置为私有,在外部…..*中将类设置为公共。然而,即使这样,也有人可以用您的内部包名声明一个包,并访问其中的类。如果您想要真正的模块化,您可以使用OSGI捆绑包。如果我将内部-*类包设为私有,我无法从外部

我正在基于以下结构的spring创建一个库(jar):

  • com.mycompany.mylib/
    • 外部api/
    • 内部对象/
    • 内部类/
外部api中的类使用内部-*包中的类


如何使客户端只能看到外部api包?

普通JAR文件不支持包级模块化。您所能做的就是在
.internal…..*
包中将类设置为私有,在
外部…..*
中将类设置为公共。然而,即使这样,也有人可以用您的内部包名声明一个包,并访问其中的类。如果您想要真正的模块化,您可以使用OSGI捆绑包。如果我将内部-*类包设为私有,我无法从外部api包访问它们…如果您的要求可以通过将内部包设为私有来满足,那么您可以在外部包中创建实用程序类,并使用反射从内部包加载类。如果如果您愿意使用反射,那么您可以将
内部包
保存在
机密
文件夹中,这样它就不会在类路径上被访问。当您需要其中的类时,在外部包中,您可以在运行时使用ClassLoader.defineClass()从中加载类。您的意思是使用内部-*包中的一些公共工厂从外部-*包中加载包私有类,或者,在工厂内部有一些逻辑来禁止从com.mycompany.mylib外部访问。。。这将满足我的需要,但我担心这里的一些开销。我希望有更优雅的解决方案。