自定义容器接口
public interface IContainer {
public void start();
public void stop();
}
容器实现类:
public class ErrorMsgContainer implements IContainer {
private final String ERRORMSG_FILE = "classpath*:errorCfg.properties";
@Override
public void start() {
Properties properties = new Properties();
try {
PathMatchingResourcePatternResolver path = new PathMatchingResourcePatternResolver();
Resource[] resources = path.getResources(ERRORMSG_FILE);
if (resources == null || resources.length == 0) {
return;
}
for (Resource rs : resources) {
properties.load(new InputStreamReader(rs.getInputStream(), Charset.forName("UTF-8")));
ErrorMsgUtils.put(properties);
}
} catch (IOException e) {
}
System.out.println("ErrorMsgContainer启动!");
}
@Override
public void stop() {
ErrorMsgUtils.clear();
}
}
错误信息工具:
public class ErrorMsgUtils {
private static Map<String,String> errorMsg = new ConcurrentHashMap<>();
/**
* 属性文件信息存放
* @param pro
*/
protected static void put(Properties pro){
Set<Object> keys = pro.keySet();
for (Object object : keys) {
String key = (String) object;
errorMsg.put(key, pro.getProperty(key));
}
}
/**
* 属性文件信息存放
* @param pro
*/
protected static void clear(){
errorMsg.clear();
}
/**
* 返回消息
* @param key
* @param obj
* @return
*/
public static String get(String key,Object... obj){
String value = errorMsg.get(key);
if(value == null){
return key;
}
if(obj == null || obj.length == 0){
return value;
}
return MessageFormat.format(value,obj);
}
}
返回所有容器实现类(在文件中配置)
public class IContainerFactory {
public IContainerFactory() {
}
public List<IContainer> getAllContainerImpl() {
List<IContainer> list = new ArrayList<IContainer>();
IContainer ic = null;
ServiceLoader<IContainer> serviceLoader = ServiceLoader.load(IContainer.class);
Iterator<IContainer> searchs = serviceLoader.iterator();
while (searchs.hasNext()) {
ic = searchs.next();
list.add(ic);
}
return list;
}
}
启动容器
public static void main(String[] args) throws IOException {
IContainerFactory icf = new IContainerFactory();
List<IContainer> list = icf.getAllContainerImpl();
for (IContainer i : list) {
i.start();
}
System.in.read();
}