工作中,需要手动创建一个对象,但用到了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. AS3下如何来判断XML属性的是否存在

    在as3中判断xml节点是否存在可用XMLList中的方法:hasOwnProperty(p:String):Boolean. 但是判断xml节点是否存在某一属性,对象中好像没有该方法,只能用unde ...

  2. UNIX网络编程-基本API介绍(一)

    1.基本结构 大多数套接口函数都需要一个指向套接口地址结构的指针作为参数.每个协议族都定义它自己的套接口地址结构.这些结构的名字均以“sockaddr_”开头,并以对应每个协议族的唯一后缀结束. 1. ...

  3. EL简介

    一.EL简介 1.语法结构    ${expression}2.[]与.运算符    EL 提供.和[]两种运算符来存取数据.    当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符 ...

  4. uva 1368 DNA Consensus String

    这道题挺简单的,刚开始理解错误,以为是从已有的字符串里面求最短的距离,后面才发现是求一个到所有字符串最小距离的字符串,因为这样的字符串可能有多个,所以最后取最小字典序的字符串. 我的思路就是求每一列每 ...

  5. 百度地图API示例之根据城市名设置地图中心点

    代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" con ...

  6. git使用命令, 特别:git checkout -b a 与 git branch a区别

    摘自: https://my.oschina.net/u/587974/blog/74341 创建分支: $ git branch mybranch 切换分支: $ git checkout mybr ...

  7. MVC 下拉單數據內容綁定

    #region        /// <summary>授權範圍自建列表</summary>        /// <returns></returns> ...

  8. java并发编程_CountDownLanch(倒计数锁存器)应用场景

    使用介绍: 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CountDownLatch.由于调用了 countDown() 方法,所以在 ...

  9. ---iproute2 策略路由

    http://linux.chinaunix.net/techdoc/net/2007/03/30/953750.shtml 这篇文章写的例子讲明白策略路由的使用,但是本身好像不用这么麻烦, 用系统默 ...

  10. knockoutJS+knockout.multimodels使用记录

    可以多次绑定,但不能嵌套绑定 错误示例: <div class="con_c" data-model="viewModel"> <div da ...