All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.youthlin.ioc.context.AbstractContext Maven / Gradle / Ivy

package com.youthlin.ioc.context;

import com.youthlin.ioc.annotaion.AnnotationUtil;
import com.youthlin.ioc.annotaion.IAnnotationProcessor;
import com.youthlin.ioc.annotaion.SimpleAnnotationProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * 创建: youthlin.chen
 * 时间: 2017-08-10 13:50.
 */
@SuppressWarnings("WeakerAccess")
public abstract class AbstractContext implements Context {
    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractContext.class);
    protected IAnnotationProcessor processor = new SimpleAnnotationProcessor();

    public AbstractContext() {
        this("");
    }

    public AbstractContext(String... scanPackages) {
        processor.autoScan(scanPackages);
        LOGGER.info("name  map:{}", processor.getNameBeanMap());
        LOGGER.info("class map:{}", processor.getClazzBeanMap());
    }

    @Override public Object getBean(String name) {
        return processor.getNameBeanMap().get(name);
    }

    @SuppressWarnings("unchecked")
    @Override public  T getBean(Class clazz) {
        return AnnotationUtil.getBean(processor.getClazzBeanMap(), clazz);
    }

    @SuppressWarnings("unchecked")
    @Override public  T getBean(String name, Class clazz) {
        Object o = processor.getNameBeanMap().get(name);
        return (T) o;
    }

    @Override public int getBeanCount() {
        return processor.getClazzBeanMap().size();
    }

    @Override public Set getBeans() {
        Set set = new HashSet<>();
        for (Map.Entry entry : processor.getClazzBeanMap().entrySet()) {
            set.add(entry.getValue());
        }
        return set;
    }

    @Override public Set getUnloadedClass() {
        return processor.getUnloadedClass();
    }

}