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

net.hasor.solon.boot.HasorConfiguration Maven / Gradle / Ivy

There is a newer version: 3.0.0-M3
Show newest version
package net.hasor.solon.boot;

import net.hasor.core.AppContext;
import net.hasor.core.Module;
import net.hasor.utils.ExceptionUtils;
import net.hasor.utils.StringUtils;
import org.noear.solon.Solon;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.annotation.Inject;
import org.noear.solon.core.bean.InitializingBean;

import java.io.IOException;

/**
 * 将注解的配置转到 BuildConfig 实例上
 *
 * @author noear
 * @since 2020.10.10
 * */
@Configuration
public class HasorConfiguration implements InitializingBean {
    @Inject
    private org.noear.solon.core.AppContext context;

    /**
     * 此构建函数,是为了手动写代码提供支持;充许EnableHasor注在别的临时类上实现配置
     * 

* 为开发隐式插件提供支持 */ @Override public void afterInjection() throws Throwable { EnableHasor enableHasor = Solon.app().source().getAnnotation(EnableHasor.class); BuildConfig buildConfig = BuildConfig.getInstance(); // 处理mainConfig buildConfig.mainConfig = enableHasor.mainConfig(); // 处理useProperties buildConfig.useProperties = enableHasor.useProperties(); // 处理startWith for (Class startWith : enableHasor.startWith()) { if(startWith.getAnnotations().length > 0) { context.getWrapAsync(startWith, (bw) -> { buildConfig.addModules(bw.get()); }); }else{ buildConfig.addModules(context.getBeanOrNew(startWith)); } } // 把Solon 中所有标记了 @DimModule 的 Module,捞进来。 //交给XPluginImp处理 // // 处理scanPackages if (enableHasor.scanPackages().length != 0) { for (String p : enableHasor.scanPackages()) { if (p.endsWith(".*")) { context.beanScan(p.substring(0, p.length() - 2)); } else { context.beanScan(p); } } } // 处理customProperties Property[] customProperties = enableHasor.customProperties(); for (Property property : customProperties) { String name = property.name(); if (StringUtils.isNotBlank(name)) { buildConfig.customProperties.put(name, property.value()); } } //没有EnableHasorWeb时,生成AppContext并注入容器 // if (Solon.app().source().getAnnotation(EnableHasorWeb.class) == null) { //所有bean加载完成之后,手动注入AppContext context.wrapAndPut(AppContext.class, initAppContext()); } } private AppContext initAppContext() { try { return BuildConfig.getInstance().build(null); } catch (IOException e) { throw ExceptionUtils.toRuntimeException(e); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy