`

java程序中获得spring管理的bean的方法

阅读更多

读取xml文件

  /**

  * 利用XmlBeanFactory(Resource resource)

  * 这里Resource必须是xml格式

  * Resource包括:AbstractResource, ClassPathResource, FileSystemResource,

  * InputStreamResource, ServletContextResource, UrlResource

  */

  /*

  * 利用 InputStreamResource(InputStream inputStream)

  * 要将applicationContext.xml放在项目根目录下

  */

  InputStream is = null;

  try {

  is = new FileInputStream("applicationContext.xml");

  } catch (FileNotFoundException e) {

  e.printStackTrace();

  }

  Resource resource = new InputStreamResource(is);

  BeanFactory factory = new XmlBeanFactory(resource);

  UserDao userDao = (UserDao)factory.getBean("userDao");

  /*

  * 利用 Properties

  * 要将bean.properties放在类路径--源文件夹(src)目录下

  */

  1.利用ClassPathXmlApplicationContext

  可以从classpath中读取XML文件

  (1) ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

  UserDao userDao = (UserDao)context.getBean("userDao");

  (2) ClassPathXmlApplicationContext resource = new ClassPathXmlApplicationContext(new  String[]{"applicationContext-ibatis-oracle.xml","applicationContext.xml","applicationContext-data-oracle.xml"});

  BeanFactory factory = resource;

  UserDao userDao = (UserDao) factory.getBean("userDao");

  2. 利用ClassPathResource

  可以从classpath中读取XML文件

  Resource cr = new ClassPathResource("applicationContext.xml");

  BeanFactory bf=new XmlBeanFactory(cr);

  UserDao userDao = (UserDao)bf.getBean("userDao");

  加载一个xml文件 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer不起作用

  3.利用XmlWebApplicationContext读取

  从Web应用程序的文件架构中,指定相对位置来读取定义文件。

  XmlWebApplicationContext 的建构子无法带参数,参考API文件会发现,预设的location会指向/WEB-INF/applicationContext.xml档案。使用其 public static属性DEFAULT_CONFIG_LOCATION可取得此预设档名。由於我使用MyEclipse,预设会多一个"/WebRoot"的 目录在WEB-INF之前,因此若在web project里有一些与web无关的程式要使用context时(例如处理一些MVC架构中的"M"的部份),就无法使用 XmlWebApplicationContext来读取bean定义档,因为default location会差一个"WebRoot"的目录。

  即 使在web.xml里面,在DispatcherServlet定义中重新定义contextConfigLocation也一样(此定义可以 override掉XmlWebApplicationContext中的DEFAULT_CONFIG_LOCATION值),因为与web无关的程式 并不会经过web.xml的定义档设定。目前我还没试成功过XmlWebApplicationContext取得bean定义档,使用 ClassPathXmlApplicationContext反而会快一些。

  XmlWebApplicationContext ctx = new XmlWebApplicationContext();

  ctx.setConfigLocations(new String[] {"/WEB-INF/ applicationContext.xml");

  ctx.setServletContext(pageContext.getServletContext());

  ctx.refresh();

  UserDao  userDao = (UserDao ) ctx.getBean("userDao ");

 

4.利用FileSystemResource读取

  Resource rs = new FileSystemResource("D:/tomcat/webapps/test/WEB-INF/classes/ applicationContext.xml");

  BeanFactory factory = new XmlBeanFactory(rs);

  UserDao  userDao  = (UserDao )factory.getBean("userDao");

  值得注意的是:利用FileSystemResource,则配置文件必须放在project直接目录下,或者写明绝对路径,否则就会抛出找不到文件的异常

  5.利用FileSystemXmlApplicationContext读取

  可以指定XML定义文件的相对路径或者绝对路径来读取定义文件。

  方法一:

  String[]   path={"WebRoot/WEB-INF/applicationContext.xml","WebRoot/WEB-INF/applicationContext_task.xml"};

  ApplicationContext context = new FileSystemXmlApplicationContext(path);

  方法二:

  String path="WebRoot/WEB-INF/applicationContext*.xml";

  ApplicationContext context = new FileSystemXmlApplicationContext(path);

  方法三:

  ApplicationContext ctx =

  new FileSystemXmlApplicationContext("classpath:地址");

  没有classpath的话就是从当前的工作目录

  *******************************************************************************

  **         分割一 下                                                                                                            **

  *******************************************************************************

  获取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()方法,可以方便的获取到 ApplicationCont

  ext。Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext

  context)方法将ApplicationContext 对象注入。

  方法四:继承自抽象类WebApplicationObjectSupport

  说明:

  类似上面方法,调用getWebApplicationContext()获取WebApplicationContext

  方法五:实现接口ApplicationContextAware

  说明:

  实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对

  象。Spring初始化时,会通过该方法将ApplicationContext 对象注入。

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

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

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

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

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

分享到:
评论

相关推荐

    java中获得spring中的BEAN

    通过上述介绍可以看出,在Java中获取Spring中的Bean有多种方式,可以根据项目的实际情况选择最合适的方法。无论是使用XML配置还是基于注解的方式,或者是自定义工具类,Spring框架都提供了非常灵活的机制来支持各种...

    spring bean XML配置入门

    在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...

    实例化Spring bean的两种工厂方法

    在Spring框架中,bean的实例化是其核心功能之一,它允许我们管理应用程序中的对象生命周期。本篇将详细探讨两种工厂方法——实例工厂方法和静态工厂方法,用于创建Spring Bean。 首先,我们要理解Spring Bean的概念...

    Spring bean 管理

    Spring的核心之一是Spring容器,它负责管理应用程序中所有组件的生命周期和依赖关系。Spring容器中最为常见的组件是Bean,它是Spring容器管理的对象实例。 在Spring中,Bean的管理包含多个方面:创建Bean实例、配置...

    Spring在应用中获得Bean的方法

    Bean是由Spring容器创建、初始化、装配以及管理的对象,它们在应用程序中扮演着重要的角色。本篇文章将深入探讨如何在Spring应用中获取Bean,以及相关的源码分析和实用工具。 首先,Spring容器(ApplicationContext...

    spring管理bean应用实例代码

    以上就是Spring管理Bean的一些主要知识点,实际应用中,开发者可以根据需求选择合适的配置方式,利用Spring的强大功能构建松耦合、易于测试的应用程序。这个压缩包中的实例代码应该涵盖了这些概念的实际运用,通过...

    spring中的bean

    在Spring中,Bean通常代表应用程序中的一个对象,这些对象由Spring容器(ApplicationContext)管理,包括创建、初始化、装配和销毁。Bean可以通过XML配置文件、注解或者Java配置类进行定义。 1. **Bean的定义**:在...

    Spring bean 动态注册,jar包热替换

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。

    spring bean的生命周期

    - **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...

    Spring的Bean配置

    Spring框架是Java开发中不可或缺的一部分,它以其控制反转(IoC)和依赖注入(DI)的核心特性,极大地简化了应用程序的构建与管理。在本文中,我们将深入探讨Spring中的Bean配置,包括IoC和DI的概念,Bean的配置方式...

    Spring学习笔记(9)----让Spring自动扫描和管理Bean

    在Spring中,Bean是一个由Spring IoC容器管理的对象,它代表应用程序中的一个组件或服务。Bean可以通过XML配置文件、注解或Java配置类来定义。而自动扫描和管理Bean则是通过注解或配置文件中的包扫描设置实现的。 #...

    深入解析Java的Spring框架中的混合事务与bean的区分

    在Java的Spring框架中,事务管理和Bean管理是两个核心概念,它们在Web应用程序开发中扮演着至关重要的角色。本文将深入解析Spring框架中的混合事务(也称为编程式事务管理)与Bean的区别,以及如何在实际应用中有效...

    Spring2.5视频教程_编码剖析Spring管理Bean的原理

    本教程通过实际编码演示,帮助学习者理解Spring如何在应用程序中管理Bean的生命周期和依赖关系。 在Spring框架中,Bean是核心组件,它们代表了应用程序中的业务对象。Spring通过IoC(Inversion of Control,控制...

    spring依赖注入bean

    在传统的 Java 应用程序中,类往往直接创建它所需的服务实例,而在 Spring 中,这些依赖关系可以通过 Spring 容器来管理。 在 Web 应用中,Spring 通常作为 Servlet 容器的一部分工作,例如 Tomcat 或 Jetty,通过 ...

    详解Spring中Bean的生命周期和作用域及实现方式

    Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了Bean的生命周期和作用域的管理方式。 一、...

    spring创建bean简单示例

    在Spring框架中,Bean是核心概念,它是Spring管理的对象,通常代表了应用程序中的业务对象或服务。本示例将深入探讨如何在Spring中创建和管理Bean。首先,我们需要理解Spring的IoC(Inversion of Control,控制反转...

    Spring项目bean实例化代码

    在Spring框架中,Bean的实例化是核心概念之一,它涉及到如何管理和控制应用程序中的对象生命周期。本篇文章将深入探讨Spring项目中Bean的实例化过程,包括三种主要的bean实例化方式:构造方法、静态工厂和实例工厂。...

    在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息

    虽然通常这个注解用于Spring管理的Bean,但也可以在非Spring管理的类中使用,只要确保配置的加载和绑定过程正确执行。 为了读取YAML配置,你需要在Spring Boot应用的启动类或者其他适当的初始化点,注册`@...

    41. Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】

    在`@Bean`方法中,Spring会调用这个方法来创建Bean实例,并自动处理依赖注入。如果你的类有依赖,可以在`@Bean`方法内部创建并注入。 在`spring-boot-hello3`这个项目中,很可能是演示了如何通过Java配置创建和注册...

    spring bean 属性总结

    在Spring中,核心概念之一就是Bean,它是一个简单的Java对象,由Spring IoC容器管理。Spring通过XML配置文件或注解来定义、配置和管理Beans。下面将深入探讨`<beans>`、`<bean>`及其属性,以及其他相关的配置元素。 ...

Global site tag (gtag.js) - Google Analytics