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