欢迎加入我的QQ交流群425783133
一、用于获取注册类的类
package com.util.test;
import java.util.HashMap;
import java.util.Map;
public class StaticProvider {
protected static Map<String,String> registeredCompanies = new HashMap<String, String>();
//provide different package' accessible permission
public static Map<String,String> getRegisteredCompany(){
return registeredCompanies;
}
}
二、主动注册的类
package com.util.test;
@Component
public class StaticProvider1 {
private static final String COMPANY = "HDF";
/**
* register the company' info into register NakedDrillProviderRegister
*/
static {
if(!StaticProvider.registeredCompanies.containsKey(COMPANY)){
StaticProvider.registeredCompanies.put(COMPANY, StaticProvider1.class.getName());
}else if(!StaticProvider.registeredCompanies.get(COMPANY).equals(StaticProvider1.class.getName())){
try {
throw new Exception("命名重复");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
package com.util.test;
@Component
public class StaticProvider2 {
private static final String COMPANY = "ZDF";
/**
* register the company' info into register NakedDrillProviderRegister
*/
static {
if(!StaticProvider.registeredCompanies.containsKey(COMPANY)){
StaticProvider.registeredCompanies.put(COMPANY, StaticProvider2.class.getName());
}else if(!StaticProvider.registeredCompanies.get(COMPANY).equals(StaticProvider2.class.getName())){
try {
throw new Exception("命名重复");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
三、调用方式,使用spring容器加载类初始静态块
package com.util.test;
import java.util.Iterator;
import java.util.Map;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class StaticTest {
@Test
public void staticTest(){
//StaticProvider1 s1 = new StaticProvider1();
//StaticProvider2 s2 = new StaticProvider2();
/*try {
Class.forName(StaticProvider1.class.getName());
Class.forName(StaticProvider2.class.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}*/
ApplicationContext c = new ClassPathXmlApplicationContext("com/util/test/beans.xml");
Map<String,String> s = StaticProvider.registeredCompanies;
System.out.println("有几个被注册:"+s.size());
for(Iterator iterator = s.keySet().iterator();iterator.hasNext();){
String key = iterator.next().toString();
System.out.println(key);
System.out.println(s.get(key));
//使用反射操作
......
}
}
}