标签:SpringContextUtil,getBean

手动获取Bean

方法一  不用配置xml,直接java代码实现

/**
* 工厂模式选择Bean类
*/
public class MyBeanFactory { public IDataSend getBean(String className) {
try {
ApplicationContext ac = new ClassPathXmlApplicationContext(
new String[]{"spring.xml", "spring-mybatis.xml"});
return (IDataSend) ac.getBean(className);
} catch (Exception e) {
return null;
}
}
}

方法二 实现ApplicationContextAware

在spring.xml中加上:

<bean id="SpringContextUtil" class="com.XXX.utils.SpringContextUtil" />

当对SpringContextUtil实例时就自动设置applicationContext,以便后来可直接用applicationContext

/**
* 获取spring容器,以访问容器中定义的其他bean
*/
public class SpringContextUtil implements ApplicationContextAware { // Spring应用上下文环境
private static ApplicationContext applicationContext; /**
* 实现ApplicationContextAware接口的回调方法,设置上下文环境
*
* @param applicationContext
*/
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
} /**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() { return applicationContext;
} /**
* 获取对象 这里重写了bean方法,起主要作用
*
* @param name
* @return Object 一个以所给名字注册的bean的实例
* @throws BeansException
*/
public static Object getBean(String name) throws BeansException {
return getApplicationContext().getBean(name);
} /**
* 获取类型为requiredType的对象
* 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)
*
* @param name
* bean注册名
* @param requiredType
* 返回对象类型
* @return Object 返回requiredType类型对象
* @throws BeansException
*/
public static Object getBean(String name, Class requiredType)
throws BeansException {
return applicationContext.getBean(name, requiredType);
} /**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
*
* @param name
* @return boolean
*/
public static boolean containsBean(String name) {
return applicationContext.containsBean(name);
} /**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
* 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
*
* @param name
* @return boolean
* @throws NoSuchBeanDefinitionException
*/
public static boolean isSingleton(String name)
throws NoSuchBeanDefinitionException {
return applicationContext.isSingleton(name);
} /**
* @param name
* @return Class 注册对象的类型
* @throws NoSuchBeanDefinitionException
*/
public static Class getType(String name)
throws NoSuchBeanDefinitionException {
return applicationContext.getType(name);
} /**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名
*
* @param name
* @return
* @throws NoSuchBeanDefinitionException
*/
public static String[] getAliases(String name)
throws NoSuchBeanDefinitionException {
return applicationContext.getAliases(name);
} }

  

最新文章

  1. 异步CTP(Async CTP)为什么那样工作?
  2. 使用SecureCRT的SFTP在WINDOWS与LINUX之间传输文件
  3. win7下IIS错误:&quot;无法访问请求的页面,因为该页的相关配置数据无效&quot;的解决方法(转)
  4. Apache kafka原理与特性(0.8V)
  5. iOS tintColor解析
  6. DB time实时过程分析
  7. The Tower of Babylon
  8. 教你50招提升ASP.NET性能(二十六):对于开发人员的数据库性能技巧
  9. Python模拟登录实战(二)
  10. 全局通知Notification
  11. Code Forces 414B 很不错的双手,以促进合规
  12. Android 获得各处图片的方法
  13. zTree实现单独选中根节点中第一个节点
  14. 【转】搭建自己的 sentry 服务
  15. iOS 开发 ZFUI framework控件,使布局更简单
  16. 问题 1690: 算法4-7:KMP算法中的模式串移动数组
  17. awk、sed、date命令使用
  18. Linux之nfs服务
  19. 报错:NoSuchMethodError: kafka.javaapi.PartitionMetadata.leader()Lkafka/cluster/Broker;
  20. 深入理解CMA【转】

热门文章

  1. 【Python】【demo实验2】【打印乘法口诀表】
  2. Configure脚本支持说明
  3. Oracle RAC安装文档
  4. 建立分表sql执行语句批量生成工具(自创)
  5. LOJ526「LibreOJ β Round #4」子集
  6. linux连接Windows系统之项目连接
  7. Zabbix 系统概述与部署
  8. Codeforces 1194E. Count The Rectangles
  9. js中的奇闻异事
  10. 分布式的几件小事(二)dubbo的工作原理