`
ynztpwl
  • 浏览: 55932 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

获得Spring Bean的方法(Z)

 
阅读更多

今天看到网上有转载的获得Spring Bean的方法,觉得值得珍藏,现摘录在此。

众所周知,Spring框架将DI模式发挥到了极至,因此,系统里面用Spring管理的Bean相互之间的获取是非常

方便的,只要使用者提供一个setter方法并在配置文件中配置该属性就可以。

但是,对于系统中非Spring框架管理的类,如果需要获取Spring管理的类,或者,程序中需要动态的根据Be

an的id来获取Bean实例,不可能事先为该类提供所有需要的Bean属性的setter方法,在类似这样的情况下,

获取Spring框架管理的类实例的方法有多种,现在简单总结如下:

方法一:在初始化时保存ApplicationContext对象
代码:
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId");
说明:
这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。


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

import org.springframework.web.context.support.WebApplicationContextUtils;
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 对象注入。

以上方法适合不同的情况,请根据具体情况选用相应的方法。

这里值得提一点的是,系统中用到上述方法的类实际上就于Spring框架紧密耦合在一起了,因为这些类是知

道它们是运行在Spring框架上的,因此,系统中,应该尽量的减少这类应用,使系统尽可能的独立于当前运

行环境,尽量通过DI的方式获取需要的服务提供者。

方法五比较可行,可以设计一个工具类,专门来获取Spring中的类。减少对业务代码的侵入性。

分享到:
评论

相关推荐

    spring-5.2.6.7z

    Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大...

    spring-5.2.6.RELEASE-dist.7z

    Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。

    SpringBoot (4.71G)精华详解

    7.Spring配置bean解析具体过程.mp4 8.Bean定义解析流程详细分析.mp4 9.BeanDefinition完整装配过程详解.mp4*b'X4O0~!n"\;?.q 10.Spring的Bean定义解析全流程梳理.mp40o*y1U(d#P3J:b.? 11.Spring的Bean加载流程与缓存...

    springsequence.7z

    spring从配置文件加载bean定义到bean工厂画的时序图,大概流程上面都有描述,但是一些具体实现细节需要自己看代码了解,这张图只是描述基本流程,跟着这个图走一遍spring的源码,基本spring加载bean定义这块会比较...

    factory-bean-demo.7z

    spring 自定义 FactoryBean 样例工程,可以通过这个工程通过实现FactoryBean来扩展Spring容器

    迅雷 11.1.8.1418.7z

    在手写Spring源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC, AOP、 Bean生命周期、上下文、作用域、资源处理等内容实现。适合人群:具备一定编程基础,工作1-3年的研发人能学到什么...

    java web开发技术大全4 z04 pdf

    AJAX的支持等)、Spring(Ioc容器、装配Java Bean、Jdbc和Hibernate模板、事务管理、Spring AOP等)以及 Hibernate(会话、映射、标准查询API、HQL、事务管理、锁等)。除此之外,《Java Web开发技术大全:JSP+...

    java web开发技术大全3 z03 pdf

    AJAX的支持等)、Spring(Ioc容器、装配Java Bean、Jdbc和Hibernate模板、事务管理、Spring AOP等)以及 Hibernate(会话、映射、标准查询API、HQL、事务管理、锁等)。除此之外,《Java Web开发技术大全:JSP+...

    java web开发技术大全2 z02 pdf

    AJAX的支持等)、Spring(Ioc容器、装配Java Bean、Jdbc和Hibernate模板、事务管理、Spring AOP等)以及 Hibernate(会话、映射、标准查询API、HQL、事务管理、锁等)。除此之外,《Java Web开发技术大全:JSP+...

    shiro入门学习demo源码

    <bean id="myShiroRealm" class="com.z.shiro.realm.ShiroRealm"> <property name="cacheManager" ref="cacheManager" /> </bean> <!-- Shiro Filter --> <bean id="shiroFilter" class="org....

    Java Web开发技术大全5.z05 pdf

    AJAX的支持等)、Spring(Ioc容器、装配Java Bean、Jdbc和Hibernate模板、事务管理、Spring AOP等)以及 Hibernate(会话、映射、标准查询API、HQL、事务管理、锁等)。除此之外,《Java Web开发技术大全:JSP+...

    Java Web开发技术大全.zip pdf文件

    AJAX的支持等)、Spring(Ioc容器、装配Java Bean、Jdbc和Hibernate模板、事务管理、Spring AOP等)以及 Hibernate(会话、映射、标准查询API、HQL、事务管理、锁等)。除此之外,《Java Web开发技术大全:JSP+...

    java web开发技术大全1 pdf

    AJAX的支持等)、Spring(Ioc容器、装配Java Bean、Jdbc和Hibernate模板、事务管理、Spring AOP等)以及 Hibernate(会话、映射、标准查询API、HQL、事务管理、锁等)。除此之外,《Java Web开发技术大全:JSP+...

    NewsSystem:基于Struts + Spring + Hibernate + Bootstrap

    jQuery的引导程序UEditor——在线HTML编辑器模块介绍公共类设计Web.xml中配置Struts及初始化Spring容器,准备WEB-INF路径下applicationContex.xml文件作为Spring配置文件,在Spring中定义数据源Bean,使用C3P0数据...

    毕设项目-基于SpringBoot+mybatis搜索引擎优化的健康问答系统java源码+项目说明.7z

    基于SpringBoot+mybatis搜索引擎优化的健康问答系统系统java源码+项目说明.7z 采用spring boot + mybatis 框架构建 前端模型采用 theleaf 模板 爬虫模块采用 webmagic 框架 搜索引擎模块采用 luence 框架 数据源采用...

    BookStore.rar

    该网上书城前端采用bootstrap进行设计,后台采用jsp加servlet加javabean的mvc模式实现,实现了注册登录购物车分页查询,后台管理等功能。

    基于java语言,使用springboot框架开发的学生考勤管理系统.7z

    能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的、:I0C、AOP、Bean生命周期、上下文、作用域、资源处理等。 基于java语言,使用...

    基于SSH2图书管理系统源码.7z

    图书类型:图书类别,类别名称,可借阅天数 图书:图书条形码,图书名称,图书所在类别...采用技术: SSH2(Struts2 + Spring + Hibernate),标准SSH2框架,采用了基于注解方式管理Bean和事务,使用Poi进行Excel批量导出

    DWR.xml配置文件说明书(含源码)

    因为调用远程bean的方法前DWR不会检测将要执行的方法是不是静态方法,如果是静态方法那么creator就不用创建.这种机制可以适用任何类型的creator,但new类型的creator是最简单配置的. 3.2 Security Creator可以配置类的...

    struts2驱动包

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested ...

Global site tag (gtag.js) - Google Analytics