工作中,需要手动创建一个对象,但用到了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方案的更多相关文章

  1. 在Bean中获取spring 容器 并通过容器获取容器中其他bean

    spring 提供了Awear 接口去 让bean 能感受到外界的环境.Awear 接口有很多实现,常用的有 ApplicationContextAware (可以通过实现这个接口去获取Applica ...

  2. Spring Spring boot 获取IOC中的bean,ApplicationContext

    https://blog.csdn.net/weixin_38361347/article/details/89304414 https://www.jianshu.com/p/9ea13b00b1d ...

  3. Spring:获取容器中的Bean

    某些情况下我们要获取 IOC 容器中指定注解.类型.名字的 Bean 要获取 IOC 容器中指定条件的 Bean 可以通过 ApplicationContext 相应的方法 @Autowired pr ...

  4. 【转】SpringTest框架JUnit单元测试用例获取ApplicationContext实例的方法

    转自:http://www.coderli.com/junit-spring-test-applicationcontext JUnit单元测试用例中使用Spring框架,直接方式如下. @RunWi ...

  5. Spring Boot -- 启动流程分析之ApplicationContext 中

    上一节我们已经分析到AbsractApplicationContext类refresh方法中的postProcessBeanFactory方法,在分析registerBeanPostProcessor ...

  6. 手写Spring框架,是时候撸个AOP与Bean生命周期融合了!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 嘎小子,这片代码水太深你把握不住! 在电视剧<楚汉传奇>中有这么一段刘邦 ...

  7. Spring 框架 详解 (三)-----IOC装配Bean

    IOC装配Bean: 1.1.1 Spring框架Bean实例化的方式: 提供了三种方式实例化Bean. * 构造方法实例化:(默认无参数) * 静态工厂实例化: * 实例工厂实例化: 无参数构造方法 ...

  8. Spring 框架 详解 (四)------IOC装配Bean(注解方式)

    Spring的注解装配Bean Spring2.5 引入使用注解去定义Bean @Component  描述Spring框架中Bean Spring的框架中提供了与@Component注解等效的三个注 ...

  9. Spring 自动转配类 在类中使用@Bean 注解进行转配但是需要排除该类说明

    在spring中可以使用 @Component @Configuration @Bean(实例化后返回该bean)进行类实例的自动装配. 需求: 排除指定需要自动转配的类. 说明: 1.在以上注解中  ...

随机推荐

  1. 玩转单元测试之WireMock -- Web服务模拟器

    玩转单元测试之WireMock -- Web服务模拟器 WireMock 是一个灵活的库用于 Web 服务测试,和其他测试工具不同的是,WireMock 创建一个实际的 HTTP服务器来运行你的 We ...

  2. visudo 使用摘记

    1. sudo <command> 免输入密码.root 运行 visudo. 添加命令行:<username>    <hostname>=NOPASSWD: & ...

  3. ORACLE 10G 闪回建议

    Flashback Tips The following tips and restrictions apply to using flashback features. Flashback Tips ...

  4. HDU5878

    http://acm.hdu.edu.cn/showproblem.php?pid=5878 给出你一个数字,让你求出大于这个数字n并且是形如2^a*3^b*5^c*7^d的最小的数: 就是用打表法求 ...

  5. Android如何使用NoHttp

    NoHttp 源码及Demo托管在Github欢迎大家Star: https://github.com/yanzhenjie/NoHttp NoHttp是专门做Android网络请求与下载的框架. N ...

  6. noip2006解题报告

    T1.能量项链 给出一串数字(其实是个环也就是可以旋转).n个数组成n颗珠子,形如: 1 2 3 4 表示的珠子是(1,2)(2,3)(3,4)(4,1) 定义珠子的聚合:如前两颗聚合放出能量为1*2 ...

  7. uva 10340 All in All

    水题,从头到尾扫一遍就可以了,输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串s.例如,abcde可以得到bce,但无法得到dc. #include<a ...

  8. javascript关于闭包变量作用域

    在项目中不时会遇到的一些小的问题以及解决办法: 1子函数调用父函数中的变量: 加return: var a=1; function num(){ var b=2; return b; } num()+ ...

  9. Python自动化 【第八篇】:Python基础-Socket编程进阶

    本节内容: Socket语法及相关 SocketServer实现多并发 1. Socket语法及相关 sk = socket.socket(socket.AF_INET,socket.SOCK_STR ...

  10. dubbo properties

    DUBBO配置项的优先级: java -D优先于 Spring配置,Spring配置优先于 properties文件的配置,这也符合一般项目的规则. 覆盖策略: JVM启动-D参数优先,这样可以使用户 ...