今天在自己开发的工具类中使用了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">