springboot 获取普通Bean

有的时候需要在spring-boo获取普通bean,用来做测试或者其他的
我们写一个util 来获取

package smaug.util.context;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * Created by naonao on 17/9/9.
 */
@Component
public class SmaugContextUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(SmaugContextUtil.applicationContext == null) {
            SmaugContextUtil.applicationContext = 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);
    }
}

怎么验证呢, 我们写一个test

package order;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import smaug.service.provider.handler.shop.ShopHandler;
import smaug.service.provider.starts.OrderStartApplication;
import smaug.service.vo.shop.ShopRestItem;
import smaug.util.context.SmaugContextUtil;
import smaug.util.json.JsonUtil;

/**
 * Created by naonao on 17/8/27.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@SpringBootTest(classes = {OrderStartApplication.class})
public class OrderTest {
    Logger logger = LoggerFactory.getLogger(OrderTest.class);

    @Autowired
    private JsonUtil jsonUtil;

    @Test
    public void testShop() {
        ShopHandler shopHandler = SmaugContextUtil.getBean(ShopHandler.class);
        ShopRestItem item = shopHandler.getShopDetail(92809, "");
        logger.info(jsonUtil.toJson(item));
    }
}

其中shopHandler 是自己实现的一个处理层

猜你喜欢

转载自blog.csdn.net/weixin_39526391/article/details/77921796