• spring中获取容器的方式


    1.实现ApplicationContextAware接口

    重写setApplicationContext 方法  添加@Component 注解

    @Component
    public class VipSolverChooser implements ApplicationContextAware {
        private Map<String, AbstractVipSolver> chooseMap = new HashMap<>();
        private ApplicationContext context;
    
        public AbstractVipSolver choose(String type) {
            return chooseMap.get(type);
        }
    
        @PostConstruct
        public void register() {
            Map<String, AbstractVipSolver> solverMap = context.getBeansOfType(AbstractVipSolver.class);
            for (AbstractVipSolver solver : solverMap.values()) {
                for (String support : solver.supports()) {
                    chooseMap.put(support, solver);
                }
            }
        }
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.context = applicationContext;
        }
    }
    

      

    2.从Application 启动类直接将spring容器放入对象内

    package com.yssoft.fs.supervise.utils;
    
    import com.yssoft.fs.repository.entity.comm.EarlyWarningTask;
    import com.yssoft.fs.supervise.service.riskWarning.RiskWarningTaskService;
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    
    import javax.annotation.Resource;
    import java.util.List;
    
    public class SpringUtil  {
    
        private static ApplicationContext applicationContext = null;
    // 非@import显式注入,@Component是必须的,且该类必须与main同包或子包
        // 若非同包或子包,则需手动import 注入,有没有@Component都一样
        // 可复制到Test同包测试
    
        public static void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            if(SpringUtil.applicationContext == null){
                SpringUtil.applicationContext  = applicationContext;
            }
            //查询所有预警任务,开启的预警任务自动开启
            RiskWarningTaskService riskWarningTaskServiceStatic=applicationContext.getBean(RiskWarningTaskService.class);
            List<EarlyWarningTask> earlyWarningTask = riskWarningTaskServiceStatic.findEarlyWarningTaskAll();
            for (EarlyWarningTask warningTask : earlyWarningTask) {
                //如果任务是打开的,可就开启任务
                if("1".equals(warningTask.getStat())){
                    riskWarningTaskServiceStatic.editState("1",warningTask.getId().toString(),warningTask.getTitle());
                    riskWarningTaskServiceStatic.editState("0",warningTask.getId().toString(),warningTask.getTitle());
                }
            }
        }
    
        //获取applicationContext
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
        //通过name获取 Bean.
        public static Object getBean(String name){
            return getApplicationContext().getBean(name);
    
        }
    
        //通过class获取Bean.
        public static <T> T getBean(Class<T> clazz){
            return getApplicationContext().getBean(clazz);
        }
    
        //通过name,以及Clazz返回指定的Bean
        public static <T> T getBean(String name,Class<T> clazz){
            return getApplicationContext().getBean(name, clazz);
        }
    
    }
    

      

    /**
         * 启动嵌入式的Tomcat并初始化Spring环境
         */
        public static void main(String[] args) throws Exception {
            ApplicationContext app = SpringApplication.run(WebApplication.class, args);
            SpringUtil.setApplicationContext(app);
        }
    

      

    建议使用第一种非常简单

  • 相关阅读:
    cinder支持nfs快照
    浏览器输入URL到返回页面的全过程
    按需制作最小的本地yum源
    创建可执行bin安装文件
    RPCVersionCapError: Requested message version, 4.17 is incompatible. It needs to be equal in major version and less than or equal in minor version as the specified version cap 4.11.
    惠普IPMI登陆不上
    Linux进程状态——top,ps中看到进程状态D,S,Z的含义
    openstack-neutron基本的网络类型以及分析
    openstack octavia的实现与分析(二)原理,架构与基本流程
    flask上下文流程图
  • 原文地址:https://www.cnblogs.com/kyousuke/p/13585457.html
Copyright © 2020-2023  润新知