今天在自己開發的工具類中使用了spring注入的方式調用了其他類,但是發生的報錯,在整理了后今天小結一下。
首先簡單介紹下spring容器,spring容器是整個spring框架的核心,通常我們說的spring容器就是bean工廠,bean工廠負責創建和初始化bean、裝配bean並且管理應用程序中的bean.spring中提供了兩個核心接口:BeanFactory和ApplicationContext,ApplicationContext是BeanFactory子接口,它提供了比BeanFactory更完善的功能。
從上面可以看出所有依賴注入的類都必須要加入到spring容器中,由spring容器幫我們做類的事例化,管理我們的類,下面我們簡單介紹下加入spring容器的四種方式(spring內置注解如@Controller、@Service這種就不講解了)。
1、在項目啟動時,通過@bean的方式將普通類事例化到spring容器中,如下

2、通過@component注解把普通pojo實例化到spring容器中,如下

3、通過實現ApplicationContextAwarej加載上下文的方式實現,如下
①實現ApplicationContextAware接口:
package cn.bravolinks.erp.prm_website.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringBeanFactoryUtils implements ApplicationContextAware {
private static ApplicationContext appCtx;
/**
* 此方法可以把ApplicationContext對象inject到當前類中作為一個靜態成員變量。
* @param applicationContext ApplicationContext 對象.
* @throws BeansException
*/
@Override
public void setApplicationContext( ApplicationContext applicationContext ) throws BeansException {
appCtx = applicationContext;
}
/**
* 獲取ApplicationContext
* @return
*/
public static ApplicationContext getApplicationContext(){
return appCtx;
}
/**
* 快速得到一個BEAN
* @param beanName bean的名字
* @return 返回一個bean對象
*/
public static Object getBean( String beanName ) {
return appCtx.getBean( beanName );
}
/**
* 快速得到一個BEAN
* @param clazz bean的類型
* @return
*/
public static <T> T getBean(Class<T> clazz){
return appCtx.getBean(clazz);
}
}
②spring容器創建實例
RestWorkFlowService restWorkFlowService = SpringBeanFactoryUtils.getBean(RestWorkFlowService.class);
4、通過spring配置文件中的<bean id="" class=""/>實現,如下
<bean id="springContextHelper" class="com.bis.majian.practice.module.spring.util.SpringContextHelper">
