天天看點

依據類名/class擷取執行個體工具類:ApplicationContext引子手動new對象和從spring中擷取對象的差別工具類

個人部落格位址: http://www.chenguanting.top

文章目錄

  • 引子
  • 手動new對象和從spring中擷取對象的差別
  • 工具類

引子

在使用設計模式時經常會碰到需要依據指定的類名稱或者calss擷取對象的例子, 這時可以手動的new對象也可以從spring中擷取對象

手動new對象和從spring中擷取對象的差別

手動new對象

  1. 對象無法被spring所管理
  2. 對象内的成員變量無法使用 DI,入無法使用@Resource 等注入

從spring中擷取對象的差別

工具類

package com.yuyu.sales.common.util;

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

import java.util.Map;


@Component("springContextUtil")
public class SpringContextUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    public void setApplicationContext(ApplicationContext applicationContext) {
        SpringContextUtil.applicationContext = applicationContext;
    }

    /**
     * 擷取應用上下文
     *
     * @return
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 根據bean名稱擷取執行個體
     *
     * @param name
     * @param <T>
     * @return
     */
    public static <T> T getBean(String name) {
        return (T) applicationContext.getBean(name);
    }

    /**
     * 根據class擷取執行個體
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> clazz) {
        return (T) applicationContext.getBean(clazz);
    }

    /**
     * 根據class擷取執行個體map
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> Map<String, T> getBeansOfType(Class<T> clazz) {
        return applicationContext.getBeansOfType(clazz);
    }

}