范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

我有8种从Spring中获取Bean的方式!

  1、在初始化时保存ApplicationContext对象
  适用于Spring框架的独立应用程序,须要程序通过配置文件初始化Spring。
  applicationContext.xml 配置:<?xml version="1.0" encoding="UTF-8"?>     
  代码: @Test public void test() {     ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");     //ApplicationContext applicationContext = new FileSystemXmlApplicationContext("applicationContext.xml");      Test test= (Test) applicationContext.getBean("test");     System.out.println(test); } 2、通过Spring提供的工具类获取ApplicationContext对象
  适合于Spring框架的B/S系统,通过 ServletContext 对象获取ApplicationContext 对象。然后在通过它获取须要的类实例。以下两个工具方式的差别是,前者在获取失败时抛出异常。后者返回null。ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);  ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);  ac1.getBean("beanId");  ac2.getBean("beanId");   3、实现接口ApplicationContextAware(推荐)
  实现该接口的 setApplicationContext(ApplicationContext context) 方法,并保存ApplicationContext 对象。Spring初始化时,扫描到该类,就会通过该方法将ApplicationContext 对象注入。然后在代码中就可以获取spring容器bean了。
  例如:
  User bean = SpringUtils.getBean("user"); @Component public class SpringUtils implements ApplicationContextAware {       private static ApplicationContext applicationContext;      @Override     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {         SpringUtils.applicationContext = applicationContext;     }       public static  T getBean(String beanName) {         if(applicationContext.containsBean(beanName)){             return (T) applicationContext.getBean(beanName);         }else{             return null;         }     }       public static  Map getBeansOfType(Class baseType){         return applicationContext.getBeansOfType(baseType);     } } 4、继承自抽象类ApplicationObjectSupport
  调用父类的getApplicationContext() 方法,获取Spring容器对象。@Service public class SpringContextHelper extends ApplicationObjectSupport {      public Object getBean(String beanName) {         return getApplicationContext().getBean(beanName);     } } 5、继承自抽象类WebApplicationObjectSupport
  调用getWebApplicationContext() 获取WebApplicationContext @Service public class SpringContextHelper extends WebApplicationObjectSupport {      public Object getBean(String beanName) {         return getApplicationContext().getBean(beanName);     } } 6、使用BeanFactory直接获取(不推荐)
  使用BeanFactory 从工厂中直接获取Bean实例,但是XmlBeanFactory 类已经废弃,因此不建议使用。@Test public void test() {     BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));     Test test= (Test) beanFactory.getBean("test");     System.out.println(test); } 7、使用ContextLoader提供的getCurrentWebApplicationContext方法@Test public void test() {     MockServletContext sc = new MockServletContext("");     sc.addInitParameter(ContextLoader.CONFIG_LOCATION_PARAM, "/applicationContext.xml");     ServletContextListener listener = new ContextLoaderListener();     ServletContextEvent event = new ServletContextEvent(sc);     listener.contextInitialized(event);          WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();     Test test= (Test) wac.getBean("test");     System.out.println(test); } 8、实现接口BeanFactoryPostProcessor
  spring工具类 方便在非spring管理环境中获取bean@Component public final class SpringUtilsS implements BeanFactoryPostProcessor {     /** Spring应用上下文环境 */     private static ConfigurableListableBeanFactory beanFactory;      @Override     public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException     {         SpringUtilsS.beanFactory = beanFactory;     }      /**      * 获取对象      *      * @param name      * @return Object 一个以所给名字注册的bean的实例      * @throws BeansException      *      */     @SuppressWarnings("unchecked")     public static  T getBean(String name) throws BeansException     {         return (T) beanFactory.getBean(name);     }      /**      * 获取类型为requiredType的对象      *      * @param clz      * @return      * @throws BeansException      *      */     public static  T getBean(Class clz) throws BeansException     {         T result = (T) beanFactory.getBean(clz);         return result;     }      /**      * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true      *      * @param name      * @return boolean      */     public static boolean containsBean(String name)     {         return beanFactory.containsBean(name);     }      /**      * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)      *      * @param name      * @return boolean      * @throws NoSuchBeanDefinitionException      *      */     public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException     {         return beanFactory.isSingleton(name);     }      /**      * @param name      * @return Class 注册对象的类型      * @throws NoSuchBeanDefinitionException      *      */     public static Class<?> getType(String name) throws NoSuchBeanDefinitionException     {         return beanFactory.getType(name);     }      /**      * 如果给定的bean名字在bean定义中有别名,则返回这些别名      *      * @param name      * @return      * @throws NoSuchBeanDefinitionException      *      */     public static String[] getAliases(String name) throws NoSuchBeanDefinitionException     {         return beanFactory.getAliases(name);     }      /**      * 获取aop代理对象      *       * @param invoker      * @return      */     @SuppressWarnings("unchecked")     public static  T getAopProxy(T invoker)     {         return (T) AopContext.currentProxy();     } } 扩展
  BeanFactory 和ApplicationContext 是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext 是BeanFactory 的子接口。BeanFactory
  (1)、是Spring里面最底层的接口(最原始的接口),包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。
  (2)、采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean() ),才对该Bean进行加载实例化。这样,我们就不能发现一些存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry 加载后,直至第一次使用调用getBean方法才会抛出异常。
  (3)BeanFactory 通常以编程的方式被创建。
  (4)BeanFactory 和ApplicationContext 都支持BeanPostProcessor 、BeanFactoryPostProcessor 的使用,但两者之间的区别是:BeanFactory 需要手动注册,而ApplicationContext 则是自动注册。
  (5) 占用内存小。ApplicationContext
  1、ApplicationContext 接口作为BeanFactory 的派生,除了提供BeanFactory 所具有的功能外,还提供了更完整的框架功能:继承 MessageSource ,因此支持国际化。统一的资源文件访问方式。 提供在监听器中注册bean的事件。 同时加载多个配置文件。 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。
  2、ApplicationContext ,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误,这样有利于检查所依赖属性是否注入。ApplicationContext 启动后预载入所有的单实例Bean,通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。
  3、ApplicationContext 占用内存空间大,当程序的配置bean特别多时,程序启动慢。
  4、ApplicationContext 能以编程式方式创建,还能能以声明的方式创建,如使用ContextLoader 。

第一大股东及其一致行动人所持股份将司法拍卖ST文化控制权会生变吗每经记者陈鹏丽每经编辑文多1月11日晚间,ST文化(SZ300089,股价1。57元,市值7。55亿元)发布公告透露,公司第一大股东蔡廷祥及其一致行动人吴淡珠所持9668。75万股令我万万没想到,越南胡志明也有文化创意市场?大家好,我是越南小妹陈玉碧。作为越南北方人这几天去了胡志明很多地方,有非常大的感触。之前有去过深圳的创意文化区,今天呢和大家聊聊胡志明一个非常有名的网红打卡地Theboxmarke咖啡星人的快乐回来了!第四届咖势精品咖啡文化节亮相广州海心沙手冲咖啡特调咖啡创意美食趣味文创伴随着阵阵咖啡香气,1月13日第四届咖势精品咖啡文化节在广州城市地标海心沙拉开帷幕。作为2022年广州国际美食节配套活动,本届咖势精品咖啡文化节由广春节遇见楚雄丨一文了解!元谋新春文旅活动景区优惠游玩线路来源云南日报今年春节元谋准备了丰富多彩的活动一起来看!元谋人世界公园元谋人世界公园集文化体验科普探奇温泉养生避寒度假运动休闲农业观光生态居住等功能于一体,旅游配套齐全,吃喝玩乐一站景区免票只是一个起点特评文深圳特区报评论员赵鑫随着2023年春节的临近,春节旅游市场逐渐升温,旅游过年的大迁徙景象初显迹象。围绕吸引游客,各地各景区使出了浑身解数。近日,江苏扬州蜀冈瘦西湖风景名胜区管委会新能源车企销量大盘点零跑全年完成率93,C01上险量不足5千辆日前,乘联会公布了各车企在2022年的销量情况。小编查阅发现,零跑汽车2022年全年上险量为111,168辆。在蔚小理哪吒零跑队列中,其销量最低。同时也意味着,零跑没有完成2022新能源中的天花板,售价145。9万,车长近5米4,4。7秒破百前不久,宝马旗下的这款全新宝马i7已经在国内上市了,车长近5米4,4。7秒破百,售价145。9万,本期我们就以这款宝马i7为蓝本,看看这款车的综合表现力到底如何,是否和他的价格匹配桂林市民春节旅游热情高涨,出游产品价格水涨船高市民在办理港澳签注。随着疫情防控政策的优化,市民春节期间外出旅游的意愿也明显增长。人们的出游意愿提高,一些热门目的地的机票和酒店价格也水涨船高。不过,高价有高价的享受,平价也有平价2023全国免票景点,白嫖的才最香,赶紧收藏三年了,终于可以出去走走了,奈何有些囊中羞涩,不要急,小编给你安排了全国免费景点,一不小心省下一个亿。杭州西湖千岛湖等景区免门票2023年元旦起到3月31日,杭州旅游对全市41个景西安银行国产分布式数据库助力数字化转型中国经济周刊记者孙冰北京报道豆浆油条胡辣汤油茶面皮肉夹馍西安人喜欢用一顿丰盛的早餐开启美好的一天。但对于朱攀和同事们来说,这却是一天新挑战的开始几十万单并发支付需求会朝着西安银行的解密中医愈病之理,读懂生命无声语言自觉通畅大小便汗腺是身体最大的三个排异通道。一天,她们凑到一起,聊起家常。汗腺说我们很早就被人们用来帮助身体健康了,中医的汗法清法下法说的就是我们。这是中医因势利导治病的秘密哩!小便接过话
黑店新品?官方本菲卡签下挪威18岁前锋施耶尔德鲁普直播吧1月13日讯葡超本菲卡官方宣布,挪威18岁前锋施耶尔德鲁普加盟球队。施耶尔德鲁普2004年出生于挪威,2020年从博德闪耀加盟丹麦北西兰,这位攻击手本赛季出战17场丹麦联赛打山海迎春福满宁德丨宁德市工业旅游战略合作协议集中签约仪式举行为打造工业与旅游结合的特色旅游服务平台,实现资源共享互惠共赢,1月13日上午,宁德市工业旅游战略合作协议集中签约仪式在宁德市旅发集团有限公司举行,市政府副市长包江苏市政协副主席陈美天美今年的第一款新品,该怎么把一个难啃的老品类做好?想象一下这样一个场景你突入敌阵,在敌军后方解救了一个衣衫褴褛披头散发的老头,接着他从一条大裤衩里掏出了道具送给你如果玩过合金弹头系列,你应该也会对这样一个经典的搞笑画面颇有共鸣。由冬日仪式感,就在古镇的这些百年茶馆摘要古镇的老茶馆,用蒸腾的烟火气诠释着冬日的暖意,临窗一坐,赏一曲评弹,品上一壶香茗,好不惬意。在清冷的冬日,那些江南古镇里有着悠久历史的老茶馆,用蒸腾的烟火气诠释着市井里弄的暖意逛花街行大运广州迎春花市重启,周末一起去逛花市吧兔年春节就要来了,广州人节前的重磅活动之一行花市,买年花要安排起来啦!花市,又被称作迎春花市或年宵花市,是岭南地区最具特色的传统年俗之一。源远流长,文化传承广州花市起源于花渡头,也宁畅打响2023服务器第一枪!推出冷静计算12款新品作者李水青编辑漠影智东西1月13日报道,近日,国内领先的服务器企业宁畅信息产业(北京)公司(简称宁畅)打响了2023年服务器新品第一枪,业内首发支持第四代英特尔至强可扩展处理器的浸智算筑路数字经济,中兴通讯发布G5系列服务器新品日前,中兴通讯在北京举办智算筑路数字经济服务器新品发布会,正式推出基于第四代英特尔至强可扩展处理器(SapphireRapids)的G5系列服务器新品。此次,中兴通讯发布的服务器新早报2022国内手机销量排名公布三星开启新品预约手机中国早报众所周知,衡量一款手机好坏除了手机配置以外,市场表现也是极其重要的参考因素。随着时间来到2023年,不少权威机构就2022年国内手机销量的数据进行了统计。纵观全球智能手宝宝的新年仪式感从一双减震学步鞋开始2023年的春节比往年来的更早,对于宝宝来说必不可少的学步鞋可要提早准备!蹦蹦跳跳,萌兔迎新,与江博士学步鞋一起守护孩子稚嫩的双脚,助力宝宝足部健康发育!鞋底越软越好是误区学步鞋减新晃打非治违零容忍严守岁末安全关红网时刻怀化1月14日讯(记者王石磊通讯员杨慧平)鼓楼广场这边有商贩在偷偷卖烟花爆竹近日,新晃应急管理局接到群众举报,称该县鼓楼广场有多个摊贩非法销售烟花爆竹。县应急管理局立即联合苹果还是安卓?年末换新机看过来,Reno9系列这些体验不输苹果即使是当时间来到了2023年,仍有不少人对于iPhone安卓手机存在一些误解。比如iPhone一定比安卓手机更流畅,用几年时间也不卡顿,亦或者是iPhone之所以不用高功率快充,目