Spring 接口工具类

我将此工具类命名AwareUtil.因Spring提供诸多*Aware的接口,当自定义类实现这些接口后,便可方便从上下文中获取当前的运行环境。如下:

  • org.springframework.context.ApplicationContextAware接口 Spring框架启动时,ApplicationContext初始化实现了该接口的Spring Bean时,会将ApplicationContext的引用作为参数传递给创建的Bean实例,创建的Bean实例可以通过ApplicationContext的引用操作Spring框架的各种资源。 作用与@Autowired标注类似。
  • LoadTimeWeaverAware,加载Spring Bean时织入第三方模块,如AspectJ
  • BeanClassLoaderAware,加载Spring Bean的类加载器
  • BootstrapContextAware,资源适配器BootstrapContext,如JCA,CCI
  • ResourceLoaderAware,底层访问资源的加载器
  • BeanFactoryAware,声明BeanFactory
  • PortletConfigAware,PortletConfig
  • PortletContextAware,PortletContext
  • ServletConfigAware,ServletConfig
  • ServletContextAware,ServletContext
  • MessageSourceAware,国际化
  • ApplicationEventPublisherAware,应用事件
  • NotificationPublisherAware,JMX通知
  • BeanNameAware,声明Spring Bean的名字
  • EnvironmentAware,环境变量读取

AwareUtil代码


import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

/**
 * 获取spring的ApplicationContext。通过ApplicationContext可以获取在spring配置文件中配置的类。
 * 获取spring的environment。通过environment可以获取在spring配置文件中属性值。
 * @author yanlz
 * @data 2017/9/25.
 */
@Component
public class AwareUtil implements ApplicationContextAware,EnvironmentAware {

    private static ApplicationContext applicationContext;

    private static Environment environment;

    /**
     * 获取spring的ApplicationContext。
     *
     * @return Spring的ApplicationContext.
     */
    public static ApplicationContext getContext() {
        return applicationContext;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        AwareUtil.applicationContext = applicationContext;
    }

    /**
     * 获取类型为requiredType的对象
     *
     * @param requiredType
     * @return
     */
    public static <T> T getBean(Class<T> requiredType) {
        return applicationContext.getBean(requiredType);
    }

    @Override
    public void setEnvironment(Environment environment) {
        AwareUtil.environment =environment;
    }

    public static Environment getEnvironment() {
        return environment;
    }
}

ThreadLocal获取登录用户信息

 /**
     * 获取当前登录用户信息
     *
     * @return
     */
    @GetMapping(value = "/cur_user")
    public ResponseModel getInfo() {
        LoginEntity logined = AwareUtil.get();
        ......    
    }

获取环境变量&对象实例

此段代码环境为Spring Boot,因此具体读取配置文件因具体情况而定。

/**
 * quartz执行类
 * @author yanlz
 * @data 2017/9/25.
 */
//@Configuration
//@PropertySource("classpath:application.properties")
public class MigrationJob implements Job {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    private String migrationDirectory = AwareUtil.getEnvironment().getProperty("migration.jar.directory");
    private String migrationScriptName = AwareUtil.getEnvironment().getProperty("migration.script.name");

    private MigrationDao migrationDao = AwareUtil.getBean(MigrationDao.class);
    private MigrationService migrationService = AwareUtil.getBean(MigrationService.class);
    private SimpMessageSendingOperations simpMessageSendingOperations = AwareUtil.getBean(SimpMessageSendingOperations.class);

}
热情洋溢的程序员欢迎您以任何形式转载!