spring直接获取bean定义

转:http://blog.csdn.net/sdandan/article/details/7911241

————————————————————————————————————————

BeanFactory为一个管理bean的工厂(即为spring的容器),它管理的对象可以是bean也可以是FactoryBean(这种请况会再调用FactoryBean的getObject()获取真正的bean)。

FactoryBean为一个工厂bean,受BeanFactory管理。

先来看一看BeanFactory:


publicinterface BeanFactory {

String FACTORY_BEAN_PREFIX = "&";

Object getBean(String name);

Object getBean(String name, Class requiredType);

boolean containsBean(String name);

boolean isSingleton(String name);

boolean isPrototype(String name);

boolean isTypeMatch(String name, Class targetType);

Class getType(String name);

String[] getAliases(String name);

}

 

BeanFactory调用者只需要调用getBean方法即可获得指定bean的引用。

ApplicationContext继承自BeanFactory,它拥有BeanFactory提供的所有配置框架和基本的功能, 而且ApplicationContext为它增加了更强的功能。因此通常在J2EE环境的应用中,最好选择使用ApplicationContext下的子类。

Web应用通过在web.xml中的配置

加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet。
这两者在功能上完全等同,只是一个是基于Servlet2.3版本中新引入的Listener接口实现,而另一个基于Servlet接口实现。开发中可根据目标Web容器的实际情况进行选择。中,

配置非常简单,在web.xml中增加:


<listener>

 <listener-class>

      org.springframework.web.context.ContextLoaderListener

 </listener-class>

</listener>

或:


<servlet>

   <servlet-name>context</servlet-name>

   <servlet-class>

      org.springframework.web.context.ContextLoaderServlet

   </servlet-class>

   <load-on-startup>1</load-on-startup>

</servlet>

通过以上配置,Web容器会自动加载/WEB-INF/applicationContext.xml初始化
ApplicationContext实例,如果需要指定配置文件位置,可通过context-param加以指定:


<context-param>

   <param-name>contextConfigLocation</param-name>

   <param-value>/WEB-INF/myApplicationContext.xml</param-value>

</context-param>

配置完成之后,即可通过
WebApplicationContextUtils.getWebApplicationContext方法在Web应用中获取ApplicationContext引用。

如:


      ApplicationContext
ctx=WebApplicationContextUtils.getWebApplicationContext();

           LoginAction action=(LoginAction)ctx.getBean("action");

启动时会自动加载ApplicationContext实例。在web应用中虽然几乎所有被BeanFactory管理的用户代码都不需要知道BeanFactory,
但是在内部实现中,BeanFactory还是以某种方式实例化。对于独立的引用程序或者一些Servlet,action,jsp可以使用以下的方法实例化BeanFactory:


    Resource resource = new
FileSystemResource("beans.xml");    

    BeanFactoryfactory = new
XmlBeanFactory(resource);


    ClassPathResource resource = new
ClassPathResource("beans.xml");  

    BeanFactoryfactory = new
XmlBeanFactory(resource);


    ApplicationContext context = new
ClassPathXmlApplicationContext(
new String[]
{"applicationContext.xml", "applicationContext-part2.xml"});

    BeanFactory factory = (BeanFactory)
context;

时间: 2024-08-28 04:13:41

spring直接获取bean定义的相关文章

使用spring手动获取Bean的时候,不能强转回它自己。

这个问题好像有点长,描述一下: 就是通过类名的方式获取Bean后,得到一个Object对象,但是这个Object不能再强转回Bean了.抛出的异常时类型转换异常.  java.lang.ClassCastException 还有一个现象就是,本来自己对类进行注解了,但是用类名获取的时候,获取不到,抛出的异常时找不到类. org.springframework.beans.factory.NoSuchBeanDefinitionException 还有一个是 java.lang.AbstractM

spring中获取bean的方式

获取bean的方式 1.可以通过上下文的getBean方法 2.可以通过@Autowired注入 定义controller @RestController @RequestMapping("/api") public class ApiUserController { /** * 上下文对象实例 */ @Autowired private ApplicationContext applicationContext; @Autowired private IUserService use

【Spring 系列】一、如何从spring中获取bean

导包 spring要管理的类信息 package com.liuyong666.service.impl; ? import com.liuyong666.service.PersonService; public class PersonServiceBean implements PersonService { @Override public void save(){ System.out.println("我是save()方法"); } } spring面向接口编程,该类对应的

spring中获取Bean

在测试类中我们获取已经装配给容器的Bean的方法是通过ApplicationContext,即 ApplicationContext ac=new ClassPathXmlApplicationContext("com/selrain/introduce/beans.xml"); 然后调用getBean方法获取相应的对象. 那么web应用中我们怎么获取呢,可以通过spring提供的WebApplicationContextUtils类获取 该类的getRequiredWebApplic

Spring Aware获取Bean和其他对象

Spring的容器托管了所有bean,实际项目中我们经常会用到容器中的功能资源,这时候就用到了 Spring Aware.简单来说,就是Spring Aware可以帮助你获取到Spring容器中的Bean或者其他资源. Spring 提供的Aware接口如下: BeanNameAware    :获取到容器中Bean的名称 BeanFactoryAware   :获得当前bean factory,这样可以调用容器的服务 ApplicationContextAware*    :当前的Applic

mvn中,使用spring中获取bean实例

由于spring官方的例子都是用maven进行代码管理, 我打算以后的代码也用maven进行管理. spring一个重要的优点就是Ioc,也就是控制反转,可以用xml文件来生成类的实例.我以前都是用eclipse下的tomcat方式来管理bean实例,用spring自带的spring tool suits管理还有点不习惯,不过生产工具都是不断优化的,所以这里也学着习惯使用. 配置文件可以放在resources文件夹下,具体目录为src\main\resources,src下的另一个文件是java

Spring中获取Bean的几种方式

ApplicationContext 的主要实现类: 1.ClassPathXmlApplicationContext:从 类路径下加载配置文件 2.FileSystemXmlApplicationContext: 从文件系统中加载配置文件 3.ConfigurableApplicationContext 扩展于 ApplicationContext,新增加两个主要方法:refresh() 和 close(), 让 ApplicationContext 具有启动.刷新和关闭上下文的能力 4.Ap

(转)Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义

1.从Spring2.0以后的版本中,Spring也引入了基于注解(Annotation)方式的配置,注解(Annotation)是JDK1.5中引入的一个新特性,用于简化Bean的配置,某些场合可以取代XML配置文件.开发人员对注解(Annotation)的态度也是萝卜青菜各有所爱,个人认为注解可以大大简化配置,提高开发速度,同时也不能完全取代XML配置方式,XML 方式更加灵活,并且发展的相对成熟,这种配置方式为大多数 Spring 开发者熟悉:注解方式使用起来非常简洁,但是尚处于发展阶段,

品Spring:SpringBoot轻松取胜bean定义注册的“第一阶段”

上一篇文章强调了bean定义注册占Spring应用的半壁江山.而且详细介绍了两个重量级的注册bean定义的类. 今天就以SpringBoot为例,来看看整个SpringBoot应用的bean定义是如何注册进容器的. 先来看看经典的启动入口,如下图01: 可以看到调用的是run方法,并把主类(main或primary)作为第一个参数出入. 接下来要做的事情,就是顺藤摸瓜,看看到底发生了什么,并确定下究竟哪些类被注册了bean定义. 此时,我就是一个快乐的小侦探,OK,走起. 上面的调用走到了这里,