声明周期托管方式,IOC
JAVA代码
MyManager.java
import java.util.HashMap;
/**
* 为了管理对象的产生
* 对象的控制权给当前类负责
* 生命周期托管实现对象的单例
* IOC控制反转
*/
public class MyManager {
// 存储所有被管理的对象
private static HashMap beanMap = new HashMap<>();
// 获取任何类的一个对象
// className : 类名
// return: (泛型T)
public static T getBean(String className) {
T obj = null;
try {
// 去beanBox看有没有存在了
obj = (T) beanMap.get(className);
if (obj == null) {
// 1. 通过类名获取类
Class clazz = Class.forName(className);
// 2. 通过反射产生一个对象
obj = (T) clazz.newInstance();
// 3. 加入集合
beanMap.put(className, obj);
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
}
Sign.java
// 单例模式 IOC
// 生命周期给别人托管
class Sign {
public Sign() {
System.out.println("创建了一个实例");
}
}
Demo.java
public class Demo {
public static void main(String[] args) {
// 获取一个实例
Sign instance1 = MyManager.getBean("Sign");
// 再获取一个实例 ;注意,构造函数也只是执行了一次,所以引用一个对象
Sign instance2 = MyManager.getBean("Sign");
System.out.println(instance1);
System.out.println(instance2);
if (instance1 == instance2) {
System.out.println("引用了同一个实例");
} else {
System.out.println("不是同一个实例");
}
}
}
执行结果: