com.bacic5i5j.framework.Gemini.java Source code

Java tutorial

Introduction

Here is the source code for com.bacic5i5j.framework.Gemini.java

Source

/**
 * Copyright (c) 2014, 5i5j.com. All rights reserved.
 * 5i5j.com. Use is subject to license terms.
 */
package com.bacic5i5j.framework;

import com.bacic5i5j.framework.inject.GeminiModule;
import com.bacic5i5j.framework.logs.LoggerFactory;
import com.google.common.collect.Lists;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.slf4j.Logger;

import java.util.List;

/**
 * ??module????
 * 
 *
 * @(#)Gemini.java 1.0 13/03/2014
 */
public class Gemini {
    public static final Gemini instance = new Gemini();

    private static final List<Module> modules = Lists.newArrayList();
    private Injector injector;

    private LoggerFactory loggerFactory;
    private Logger logger;

    private PropertiesConfiguration config;

    private Gemini() {
    }

    /**
     * ?Gemini?
     */
    public void init() {
        //
        try {
            config = new PropertiesConfiguration("global.properties");
        } catch (ConfigurationException e) {
            System.err.println(
                    "??classglobal.properties: "
                            + e.getMessage());
        }

        modules.add(new GeminiModule(this));
        this.injector = Guice.createInjector(modules);

        this.loggerFactory = this.injector.getInstance(LoggerFactory.class);
        this.logger = loggerFactory.getLogger(Gemini.class);

        this.logger.info("???");

        if (config != null) {
            logger.info(": " + config.getString("webapp.dir"));
        }
    }

    public void addModule(Module module) {
        modules.add(module);
    }

    public Logger getLogger(String name) {
        return loggerFactory.getLogger(name);
    }

    public Logger getLogger(Class type) {
        return loggerFactory.getLogger(type);
    }

    public <T> T getInstance(Class<T> type) {
        return injector.getInstance(type);
    }

    public PropertiesConfiguration getConfig() {
        return config;
    }
}