0%

Java 类加载机制(三):类加载的应用:可配置的策略

1. 可以通过 ClassLoaderloadClass()Class.forName() 自己加载类,但什么情况需要自己加载类呢

  • 很多应用使用面向接口的编程,接口具体的实现类可能有很多,适用于不同的场合
  • 具体使用哪个实现类在配置文件中配置,通过更改配置,不用改变代码,就可以改变程序的行为
  • 在设计模式中,这是一种策略模式

2. 写一个类加载应用下的策略模式 Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//服务接口
public interface IService {
public void action();
}

//客户端通过上面接口访问其方法,怎么获得 IService 实例呢?查看配置文件,根据配置的实现类,自己加载,使用反射创建实例对象
public class ConfigurableStrategyDemo {
public static IService createService() {
try {
Properties prop = new Properties();
String fileName = "data/c87/config.properties";
prop.load(new FileInputStream(fileName));
String className = prop.getProperty("service");
Class<?> cls = Class.forName(className);
return (IService) cls.newInstance();
} catch(Exception e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
IService service = createService();
service.action();
}
}

//config.properties 的内容示例为
service=shuo.laoma.dynamic.c87.ServiceB
-------------------- 本文结束感谢您的阅读 --------------------