Spring在代码中获取bean的几种方式
发布日期:2021-06-30 16:30:46 浏览次数:2 分类:技术文章

本文共 3260 字,大约阅读时间需要 10 分钟。

方法一:在初始化时保存ApplicationContext对象 

方法二:通过Spring提供的utils类获取ApplicationContext对象 

方法三:继承自抽象类ApplicationObjectSupport

方法四:继承自抽象类WebApplicationObjectSupport 

方法五:实现接口ApplicationContextAware 

方法六:通过Spring提供的ContextLoader

方法一:在初始化时保存ApplicationContext对象

ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");   ac.getBean("beanId");

说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。

方法二:通过Spring提供的工具类获取ApplicationContext对象

ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);   ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);   ac1.getBean("beanId");   ac2.getBean("beanId");
说明:这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。上面两个工具方式的区别是,前者在获取失败时抛出异常,后者返回null。
方法三:继承自抽象类ApplicationObjectSupport
说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取ApplicationContext。
Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。
方法四:继承自抽象类WebApplicationObjectSupport
说明:类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
方法五:实现接口ApplicationContextAware
说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。Spring初始化时,会通过该方法将ApplicationContext对象注入。
以下是实现ApplicationContextAware接口方式的代码,前面两种方法类似:

import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component;/** * Spring容器启动时,自动把所有的ApplicationContextAware实现找出来,然后为其注入ApplicationContext属性 * @author Administrator */@Componentpublic class SpringUtil implements ApplicationContextAware{		  private static ApplicationContext applicationContext = null;	  	  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{		  SpringUtil.applicationContext = applicationContext;		  System.out.println("-------------------ApplicationContext配置成功---------------------------");		  System.out.println("---------------simple.plugin.spring.SpringUtil-----------------------");		  System.out.println("---普通类可以通过SpringUtils.getAppContext()使用applicationContext对象-------");		  System.out.println("-----------------------"+applicationContext+"--------------------------");	  }	  	  public static ApplicationContext getApplicationContext(){		  return applicationContext;	  }	  	  public static Object getBean(String name){	    return getApplicationContext().getBean(name);	  }	  	  public static 
T getBean(Class
clazz){ return (T)getApplicationContext().getBean(clazz); } public static
T getBean(String name, Class
clazz){ return (T)getApplicationContext().getBean(name, clazz); }}
虽然,spring提供的后三种方法可以实现在普通的类中继承或实现相应的类或接口来获取spring 的ApplicationContext对象,但是在使用是一定要注意实现了这些类或接口的普通java类一定要在Spring 的配置文件applicationContext.xml文件中进行配置。否则获取的ApplicationContext对象将为null。
方法六:通过Spring提供的ContextLoader

WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();  wac.getBean(beanID);
最后提供一种不依赖于servlet,不需要注入的方式。但是需要注意一点,在服务器启动时,Spring容器初始化时,不能通过以下方法获取Spring 容器,细节可以查看spring源码org.springframework.web.context.ContextLoader。

转载地址:https://kevin.blog.csdn.net/article/details/80115587 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:object is not an instance of declaring class
下一篇:Address already in use: bind

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月25日 00时23分21秒