Rah*_*hul 7 java spring class-visibility
春天新手在这里.
我观察到Spring能够实例化我定义的非公共类(即具有默认可见性的类).谁能告诉我Spring如何实现这一目标?为什么允许这样做?
Sea*_*oyd 20
好的,这是他们如何做到的.拿这个样本类:
package hidden;
class YouCantInstantiateMe{
private YouCantInstantiateMe(){
System.out.println("Damn, you did it!!!");
}
}
Run Code Online (Sandbox Code Playgroud)
上面是一个包私有类,在不同的包中有一个私有构造函数,但我们仍然会实例化它:
代码(从不同包中的类运行):
public static void main(final String[] args) throws Exception{
Class<?> clazz = Class.forName("hidden.YouCantInstantiateMe");
// load class by name
Constructor<?> defaultConstructor = clazz.getDeclaredConstructor();
// getDeclaredConstructor(paramTypes) finds constructors with
// all visibility levels, we supply no param types to get the default
// constructor
defaultConstructor.setAccessible(true); // set visibility to public
defaultConstructor.newInstance(); // instantiate the class
}
Run Code Online (Sandbox Code Playgroud)
输出:
该死的,你做到了!
当然Spring的功能要复杂得多,因为它们也处理构造函数注入等,但这是如何实例化不可见类(或不可见的构造函数).
| 归档时间: |
|
| 查看次数: |
4212 次 |
| 最近记录: |