spring 框架通过new Object()获取applicationContext 中的bean方案
工作中,需要手动创建一个对象,但用到了spring容器中对象的业务逻辑,这时候就要去通过获取容器中的对象。这时候,可以通过实例化一个实现了ApplicationContextAware接口的类获取spring容器对象,从而获取容器中的bean。
直接上代码,如下:
package com.blue.forum.context; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.ResolvableType; /**
* @ClassName: ServletContextHolder
* @author
* @date 2015年12月9日 下午6:23:17
*/
public class AppContext implements ApplicationContextAware {
protected static ApplicationContext context; public AppContext() {
super();
System.out.println("------------初始化");
// TODO Auto-generated constructor stub
} @Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
System.out.println("初始化http.xml的 context================:"+context.toString()+"class:"+context.getApplicationName()); if (null == AppContext.context) AppContext.context = context;
} public static ApplicationContext getContext() {
return AppContext.context;
} public static final Object getBean(String name) throws BeansException {
return AppContext.context.getBean(name);
} public static final <T> T getBean(String name, Class<T> requiredType) throws BeansException {
return AppContext.context.getBean(name, requiredType);
} public static final <T> T getBean(Class<T> requiredType) throws BeansException {
return AppContext.context.getBean(requiredType);
} public static final Object getBean(String name, Object... args) throws BeansException {
return AppContext.context.getBean(name, args);
} public static final <T> T getBean(Class<T> requiredType, Object... args) throws BeansException {
return AppContext.context.getBean(requiredType, args);
} public static final boolean containsBean(String name) {
return AppContext.context.containsBean(name);
} public static final boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
return AppContext.context.isSingleton(name);
} public static final boolean isPrototype(String name) throws NoSuchBeanDefinitionException {
return AppContext.context.isPrototype(name);
} public static final Class<?> getType(String name) throws NoSuchBeanDefinitionException {
return AppContext.context.getType(name);
} public static final String[] getAliases(String name) {
return AppContext.context.getAliases(name);
}
}
值得注意的是,当项目启动的时候必须对此类进行实例化,否则使用时可能会出现空指针异常,即拿不到容器对象。
稳妥的配置如下:
<bean class="com.blue.forum.context.AppContext" lazy-init="false"></bean>
这样,妈妈再也不用担心由于懒加载出现的拿不到对象的问题了。
spring 框架通过new Object()获取applicationContext 中的bean方案的更多相关文章
- 在Bean中获取spring 容器 并通过容器获取容器中其他bean
spring 提供了Awear 接口去 让bean 能感受到外界的环境.Awear 接口有很多实现,常用的有 ApplicationContextAware (可以通过实现这个接口去获取Applica ...
- Spring Spring boot 获取IOC中的bean,ApplicationContext
https://blog.csdn.net/weixin_38361347/article/details/89304414 https://www.jianshu.com/p/9ea13b00b1d ...
- Spring:获取容器中的Bean
某些情况下我们要获取 IOC 容器中指定注解.类型.名字的 Bean 要获取 IOC 容器中指定条件的 Bean 可以通过 ApplicationContext 相应的方法 @Autowired pr ...
- 【转】SpringTest框架JUnit单元测试用例获取ApplicationContext实例的方法
转自:http://www.coderli.com/junit-spring-test-applicationcontext JUnit单元测试用例中使用Spring框架,直接方式如下. @RunWi ...
- Spring Boot -- 启动流程分析之ApplicationContext 中
上一节我们已经分析到AbsractApplicationContext类refresh方法中的postProcessBeanFactory方法,在分析registerBeanPostProcessor ...
- 手写Spring框架,是时候撸个AOP与Bean生命周期融合了!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 嘎小子,这片代码水太深你把握不住! 在电视剧<楚汉传奇>中有这么一段刘邦 ...
- Spring 框架 详解 (三)-----IOC装配Bean
IOC装配Bean: 1.1.1 Spring框架Bean实例化的方式: 提供了三种方式实例化Bean. * 构造方法实例化:(默认无参数) * 静态工厂实例化: * 实例工厂实例化: 无参数构造方法 ...
- Spring 框架 详解 (四)------IOC装配Bean(注解方式)
Spring的注解装配Bean Spring2.5 引入使用注解去定义Bean @Component 描述Spring框架中Bean Spring的框架中提供了与@Component注解等效的三个注 ...
- Spring 自动转配类 在类中使用@Bean 注解进行转配但是需要排除该类说明
在spring中可以使用 @Component @Configuration @Bean(实例化后返回该bean)进行类实例的自动装配. 需求: 排除指定需要自动转配的类. 说明: 1.在以上注解中 ...
随机推荐
- day8-多进程和多线程
Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. import threading import time def sayhi(num): #定义每个线程要 ...
- 黑马程序员_JAVA之银行业务调度系统
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 - 4号窗口为普通窗 ...
- archlinux 内核编译笔记
# cp linux-3.10.5.tar.gz /usr/src/linux-3.10.5.tar.gz# cd /usr/src# tar xvzf linux-3.10.5.tar.gz lin ...
- 记一个eclipse 错误 Undefined variable from import: randrange
我自己定义了一个random.py 和pev的包含路径一样的 解决办法是: 出现这种问题,可以import 这个模块,print 这个模块
- log4j按级别输出日志文件
log4j.properties: BASE_DIR= /home/admin/preprocess-tmc-city/logs log4j.rootLogger=debug,stdout,debug ...
- PHP&MySQL 语法
PHP操作MySQL数据库 第一步:连接数据库 $dbhost = 'localhost:3306'; //mysql服务器主机地址 $dbuser = 'guest'; //mysql用户名 $db ...
- 看完 《重来(REWORK)》
最近看完了<重来>这本书,作者是贾森 弗里德,又是一位创业成功人士. 但是从这本书来看,感觉作者更像是一位布道者,极力推荐这本书 <重来——更为简单有效的商业思维>. 公司不一 ...
- 如何防止ElasticSearch集群出现脑裂现象(转)
原文:http://xingxiudong.com/2015/01/05/resolve-elasticsearch-split-brain/ 什么是“脑裂”现象? 由于某些节点的失效,部分节点的网络 ...
- (转)jQuery中的extend()方法
本文转自:http://www.xiabingbao.com/jquery/2015/05/30/jquery-extend 原文的排版要比这里美观很多,建议去原文查看.本文仅仅作为个人的mark,方 ...
- H5测试区别与PC端测试关注点
除了基本的业务逻辑功能测试之后,H5页面的测试,需要关注以下几点: 1. 通过H5网页(非手机的返回功能)的返回功能可以返回,不会出现无法返回的情况. 2. 横屏竖屏相互切换,能自适应,并且布局不 ...