`
phpxiaoxin
  • 浏览: 252940 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring BeanFactory 实现类的getBean方法

    博客分类:
  • java
阅读更多

原文:http://blog.163.com/kangzye/blog/static/3681922320096625822733/

 

这个方法是返回一个对象实例根据一个id或者name,这个id 或者 name 将会在配置文件里出现如:

<bean id="abc" class="com.yourcompany.Abc"></bean>

系统会根据给出的class属性构造一个实例出来,然后强制转换:

BeanFactory factory=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
Abc abc=(Abc)factory.getBean("abc");
但有看过这样的代码:
<bean id="bean" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces"> 
   <value>com.ascenttech.springaop.test.Bean</value> 
  </property> 
  <property name="target"> 
   <ref local="beanTarget"/> 
  </property> 
  <property name="interceptorNames"> 
   <list> 
    <value>theAdvisor</value> 
   </list> 
  </property>
</bean>
<bean id="theBeforeAdvice" class="com.ascenttech.springaop.test.TestBefore Advice"/>
<!--CLASS-->
<bean id="beanTarget" class="com.ascenttech.springaop.test.BeanImpl"/>
<!--ADVISOR-->
<!--Note: An advisor assembles pointcut and advice-->
<bean id="theAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> 
  <property name="advice"> 
   <ref local="theBeforeAdvice"/> 
  </property> 
  <property name="pattern"> 
   <value>com\.ascenttech\.springaop\.test\.Bean\.theMethod</value> 
  </property>
</bean>

Bean 为自定义接口, 以及其实现类省略未给出
Bean x = (Bean) ctx.getBean("bean");
从 配置文件可以看出 id 为 bean 的是 org.springframework.aop.framework.ProxyFactoryBean ,但却试着往 Bean 转型,从一般来看这样势必产生 ClassCastException 类型转换错误,但事实却不会出错,因为getBean 方法不是简单的有构造器构造一个对象实例,而是这样: 如果 bean 的class 继承了 spring框架中的 FactoryBean 接口,那么getBean 先构造一个 bean 中class指定的对象,然后调用这个对象的 getObject 方法,getObject 方法返回一个  Object ,这个Object 就是 getBean 实际返回的东西。

分享到:
评论

相关推荐

    简单模拟Spring的beanFactory

    在实际的Spring框架中,`BeanFactory`接口提供了许多方法,如`getBean()`用于获取bean,`containsBean()`检查是否存在特定bean等。 首先,我们要了解`BeanFactory`的工作流程。这个过程通常包括以下步骤: 1. **...

    Spring的getBean和JdbcTemplate

    `getBean`是Spring容器的核心接口`ApplicationContext`或`BeanFactory`中的一个方法,它允许我们从Spring容器中获取一个已经定义和初始化的Bean。当你在Spring配置文件(XML或Java配置)中声明了一个Bean,Spring会...

    Spring getBean流程图1

    这个过程涉及到的类主要有`AbstractBeanFactory`、`BeanDefinition`、`BeanPostProcessor`等,它们协同工作,实现了Spring IoC容器的核心功能。理解这个过程对于深入理解Spring的工作原理和优化应用性能非常重要。在...

    简单了解Spring中BeanFactory与FactoryBean的区别

    BeanFactory的实现类有DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等,它们分别从不同的维度扩展了BeanFactory的功能。 BeanFactory的主要方法包括: * getBean(String name):根据Bean的...

    Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等).doc

    在 Spring 框架中,Bean 的实例化是通过 BeanFactory 中的 getBean 方法来实现的,该方法根据 bean 的名字、Class 类型和参数等来得到 bean 实例。 在了解 Bean 的实例化过程之前,我们需要了解 Spring 框架中 IoC ...

    Spring获取ApplicationContext对象工具类的实现方法

    在Spring中,典型的获取ApplicationContext对象的方式是使用ApplicationContext接口的一个实现类,如ClassPathXmlApplicationContext。这是一个根据给定XML文件的类路径的上下文实现。通常我们会在初始化Spring IoC...

    Spring的BeanFactory的接口注解

    - **应用场景**: 当需要自定义Bean的作用域时(例如HTTP会话作用域),可以使用此方法注册自定义的`Scope`实现类。 ##### 2. `String[] getRegisteredScopeNames();` - **功能**: 获取所有已注册到`BeanFactory`中...

    获得spring里注册Bean的四种方法

    获取 Spring 里注册的 Bean 对象可以使用四种方法:继承 BaseDispatchAction、实现 BeanFactoryAware、使用 ApplicationContext、使用 @Autowired。每种方法都有其特点和应用场景,开发者可以根据实际情况选择合适的...

    Spring源码学习三:BeanFactory解析1

    DefaultListableBeanFactory是BeanFactory接口的实现,它是Spring中最常用的Bean容器。在这个实现中,BeanDefinition被存储在一个ConcurrentHashMap(`beanDefinitionMap`)中,键是Bean的名字,值是BeanDefinition...

    简单Spring容器实现

    Spring容器的实现涉及到`DefaultListableBeanFactory`、`BeanDefinition`、`BeanPostProcessor`等多个类。在`MySpring`文件中,我们可能能看到类似的自定义实现: - `MyBeanFactory`:模拟`BeanFactory`,负责解析...

    几种spring获取bean的方法.txt

    Spring容器会自动调用该接口的`setBeanFactory(BeanFactory beanFactory)`方法,将整个`BeanFactory`实例注入到实现了该接口的类中。这样就可以通过`BeanFactory`获取任意的Bean实例。 **示例代码:** ```java ...

    68-BeanFactory与FactoryBean1

    在 Spring 中,BeanFactory 是一个工厂类(接口),用于实例化和管理 Bean。它提供了许多方法来管理 Bean,包括 getBean()、containsBean()、isSingleton() 等。 FactoryBean 是 Spring 中的一种特殊的 Bean,它...

    Spring源代码解析(一):IOC容器.doc

    例如,XmlBeanFactory是一个基于XML配置的BeanFactory实现,它读取XML配置文件,解析Bean定义,然后根据这些定义实例化和管理Bean。在XmlBeanFactory之上,Spring提供了更抽象的实现,如AbstractBeanFactory和...

    Spring在代码中获取bean的方法小结

    创建一个工具类`SpringContextUtil`,并实现`ApplicationContextAware`接口,这样Spring会在初始化时自动调用`setApplicationContext`方法,将ApplicationContext注入到静态变量中: ```java public class ...

    使用BeanFactory实现创建对象

    使用BeanFactory实现创建对象 BeanFactory是一种工厂模式,主要用来创建对象。在Java中,BeanFactory是Spring框架中的一个核心组件,用于管理和创建对象。通过使用BeanFactory,可以将对象的创建和依赖注入解耦,...

    Spring ioc源码解读

    - **DefaultListableBeanFactory**:这是BeanFactory的一个具体实现类,它继承自AbstractBeanFactory,提供了对Bean定义的存储和解析等功能。同时它也是ListableBeanFactory的实现,可以提供Bean的列表视图。 - **...

    百知教育 — Spring系列课程 — 工厂1

    // 读取配置文件中的 userService 的实现类 Class clazz = Class.forName(env.getProperty("userService")); userService = (UserService) clazz.newInstance(); } catch (ClassNotFoundException e) { e....

    spring6小细节.docx

    本文总结了 Spring 框架的一些基础知识点,包括 Bean 标签的 id 属性、对象的创建机制、对象的存储、Spring 配置文件、Bean 的定义、getBean() 方法、ApplicationContext 和 BeanFactory、Spring IoC 容器的实现等。...

Global site tag (gtag.js) - Google Analytics