`

知识点一:spring之实例化bean

阅读更多

  1. 最基本的:

    Xml代码 复制代码
    1. <bean id="someBean" class="some.someBeanSimpleFactory"/>  
    <bean id="someBean" class="some.someBeanSimpleFactory"/>
    
    

     

    Java代码 复制代码
    1. public class SomeBean{    
    2.     public void excute(){    
    3.          System.out.println("hi.");    
    4.     }    
    5. }  
    public class SomeBean{ 
        public void excute(){ 
             System.out.println("hi."); 
        } 
    }
    

     

  2. 简单工厂方法:
    Xml代码 复制代码
    1. <bean id="someBean" class="some.someBeanSimpleFactory" factory-method="create"/>  
    <bean id="someBean" class="some.someBeanSimpleFactory" factory-method="create"/>
     
    Java代码 复制代码
    1. public class SomeBeanSimpleFactory{    
    2.     public static SomeBean create(){    
    3.          new SomeBean();    
    4.     }    
    5. }  
    public class SomeBeanSimpleFactory{ 
        public static SomeBean create(){ 
             new SomeBean(); 
        } 
    }
    
     注意static。
  3. 抽象工厂方法:
    Xml代码 复制代码
    1. <bean id="someBeanFactory" class="some.someBeanFactory"/>  
    2. <bean id="someBean" class="someBeanFactory" factory-method="create"/>  
    <bean id="someBeanFactory" class="some.someBeanFactory"/>
    <bean id="someBean" class="someBeanFactory" factory-method="create"/>
    
     
    Java代码 复制代码
    1. public class SomeBeanFactory{    
    2.     public SomeBean create(){    
    3.          new SomeBean();    
    4.     }    
    5. }  
    public class SomeBeanFactory{ 
        public SomeBean create(){ 
             new SomeBean(); 
        } 
    }
    
     注意不是static方法。

这3种实例化Bean的方式都是

Java代码 复制代码
  1. ApplicationContext context=....;   
  2. SomeBean bean=(SomeBean)context.getBean("someBean");  
ApplicationContext context=....;
SomeBean bean=(SomeBean)context.getBean("someBean");

 

 

p.s. id和name的不同

  在xml文件中id是固有的属性,并且属性值是唯一的。name属性值在Spring的配置文件中也是唯一的,id和name的作用都是标识一个bean的。不同之处于,name属性值可以带有特殊字符,例如:name="ss/s"

 

 

3.2.3.2. 实例化bean
就Spring IoC容器而言,bean定义基本上描述了创建一个或多个实际bean对象的内容。当需要的时候,容器会从bean定义列表中取得一个指定的bean定义,并根据bean定义里面的配置元数据使用反射机制来创建一个实际的对象。因此这一节将讲解如何告知Spring IoC容器
们将要实例化的对象的类型以及如何实例化对象。

当采用XML描述配置元数据时,将通过<bean/>元素的class属性来指定实例化对象的类型。class 属性 (对应BeanDefinition实例的Class属性)通常是必须的(不过也有两种例外的情形,见第 3.2.3.2.3 节 “使用实例工厂方法实例化”和第 3.6 节 “bean定义的继承”)。class属性主要有两种用途:在大多数情况下,容器将直接通过反射调用指定类的构造器来创建bean(这有点等类似于在Java代码中使用new操作符);在极少数情况下,容器将调用类的静态工厂方法来创建bean实例,class属性将用来指定实际具有静态工厂方法的类(至于调用静态工厂方法创建的对象类型是当前class还是其他的class则无关紧要)。

3.2.3.2.1. 用构造器来实例化
当采用构造器来创建bean实例时,Spring对class并没有特殊的要求,
们通常使用的class都适用。也就是说,被创建的类并不需要实现任何特定的接口,或以特定的方式编码,只要指定bean的class属性即可。不过根据所采用的IoC类型,class可能需要一个默认的空构造器。

此外,IoC容器不仅限于管理JavaBean,它可以管理任意的类。不过大多数使用Spring的人喜欢使用实际的JavaBean(具有默认的(无参)构造器及setter和getter方法),但在容器中使用非bean形式(non-bean style)的类也是可以的。比如遗留系统中的连接池,很显然它与JavaBean规范不符,但Spring也能管理它。

当使用基于XML的元数据配置文件,可以这样来指定bean类:

<bean id="exampleBean" class="examples.ExampleBean"/>
<bean name="anotherExample" class="examples.ExampleBeanTwo"/>
给构造函数指定参数以及为bean实例设置属性将在随后的部份中谈及。

3.2.3.2.2. 使用 静态工厂方法实例化
当采用静态工厂方法创建bean时,除了需要指定class属性外,还需要通过factory-method属性来指定创建bean实例的工厂方法。Spring将调用此方法(其可选参数接下来介绍)返回实例对象,就此而言,跟通过普通构造器创建类实例没什么两样。

下面的bean定义展示了如何通过工厂方法来创建bean实例。注意,此定义并未指定返回对象的类型,仅指定该类包含的工厂方法。在此例中, createInstance()必须是一个static方法。

<bean id="exampleBean"
      class="examples.ExampleBean2"
      factory-method="createInstance"/>
给工厂方法指定参数以及为bean实例设置属性将在随后的部份中谈及。

3.2.3.2.3. 使用实例工厂方法实例化
与使用静态工厂方法实例化类似,用来进行实例化的实例工厂方法位于另外一个已有的bean中,容器将调用该bean的工厂方法来创建一个新的bean实例

为使用此机制,class属性必须为空,而factory-bean属性必须指定为当前(或其祖先)容器中包含工厂方法的bean的名称,而该工厂bean的工厂方法本身必须通过factory-method属性来设定(参看以下的例子)。

<!-- the factory bean, which contains a method called createInstance() -->
<bean id="myFactoryBean" class="...">
  ...
</bean>
  <!-- the bean to be created via the factory bean -->
<bean id="exampleBean"
      factory-bean="myFactoryBean"
      factory-method="createInstance"/>
虽然设置bean属性的机制仍然在这里被提及,但隐式的做法是由工厂bean自己来管理以及通过依赖注入(DI)来进行配置。

3.2.4. 使用容器
从本质上讲,BeanFactory仅仅只是一个维护bean定义以及相互依赖关系的高级工厂接口。通过BeanFactory
们可以访问bean定义。下面的例子创建了一个bean工厂,此工厂将从xml文件中读取bean定义:

InputStream is = new FileInputStream("beans.
xml");
BeanFactory factory = new XmlBeanFactory(is);
基本上就这些了,接着使用getBean(String)方法就可以取得bean的实例;BeanFactory提供的方法极其简单。它仅提供了六种方法供客户代码调用:

boolean containsBean(String):如果BeanFactory包含给定名称的bean定义(或bean实例),则返回true

Object getBean(String):返回以给定名字注册的bean实例。根据bean的配置情况,如果为singleton模式将返回一个共享的实例,否则将返回一个新建的实例。如果没有找到指定的bean,该方法可能会抛出BeansException异常(实际上将抛出NoSuchBeanDefinitionException异常),在对bean进行实例化和预处理时也可能抛出异常

Object getBean(String, Class):返回以给定名称注册的bean实例,并转换为给定class类型的实例,如果转换失败,相应的异常(BeanNotOfRequiredTypeException)将被抛出。上面的getBean(String)方法也适用该规则。

Class getType(String name):返回给定名称的bean的Class。如果没有找到指定的bean实例,则抛出NoSuchBeanDefinitionException异常。

boolean isSingleton(String):判断给定名称的bean定义(或bean实例)是否为singleton模式(singleton将在bean的作用域中讨论),如果bean没找到,则抛出NoSuchBeanDefinitionException异常。

String[] getAliases(String):返回给定bean名称的所有别名。

分享到:
评论

相关推荐

    实验一:Spring IoC中Bean的装置的jar包

    除了这些基本的Bean配置,Spring还提供了许多高级功能,如Prototype作用域(每次请求创建新的Bean实例)、Lazy初始化(只有在实际使用时才初始化Bean)、FactoryBean(用于自定义Bean的创建逻辑)等。此外,Bean后...

    spring bean XML配置入门

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

    Spring bean 管理

    - 三种实例化Bean的方式: - 使用类构造器实例化:这是最简单的实例化方式,Spring将调用无参构造器创建Bean的实例。 - 使用静态工厂方法实例化:这种方式通过调用一个静态方法来获取Bean实例,适用于简单工厂模式...

    粗略实现spring创建bean

    通过这些知识点,我们可以了解到Spring框架如何管理Bean,以及如何利用其强大的功能简化我们的开发工作。在实际项目中,理解并熟练掌握Spring Bean的创建和管理对于提升代码质量和可维护性至关重要。

    Spring依赖注入:深入理解与实践应用

    知识点六:Bean的生命周期管理是Spring框架提供的另一个重要功能。Spring容器在创建、初始化和销毁Bean的过程中提供了一系列回调接口,允许开发者在Bean的不同生命周期阶段执行特定的操作。例如,实现...

    Spring中关于Bean的管理的课件

    在Spring框架中,Bean的管理是其核心特性之一,它涉及到Bean的创建、初始化、装配以及销毁等整个生命周期过程。本课件主要涵盖了以下几个关键知识点: 1. **控制反转(IoC)和依赖注入(DI)**:Spring的核心设计...

    spring管理bean应用实例代码

    在Spring框架中,Bean管理是核心功能之一,它允许开发者通过声明式的方式配置和管理对象。这个压缩包文件“spring管理bean应用实例代码”显然包含了关于如何在Spring中配置和使用Bean的示例代码。接下来,我们将深入...

    spring创建bean简单示例

    接下来,我们将通过一个简单的步骤来展示如何在Spring中创建Bean: 1. **定义Bean的类**: 首先,创建一个Java类,例如`MyService`,它代表一个Bean。这个类可能包含一些业务逻辑。 ```java public class ...

    spring的bean加载顺序样例项目

    在Spring框架中,Bean的加载顺序是一个重要的概念,它涉及到Spring容器如何管理和初始化Bean的过程。在"spring的bean加载顺序样例项目"中,我们可以通过分析和实验来深入理解这一主题。下面将详细阐述Spring Bean的...

    第四章 Spring Bean基础1

    - 这些题目可能涵盖上述知识点,例如 BeanDefinition 的重要性,如何命名和管理 Bean,以及生命周期方法的使用等。 掌握 Spring Bean 的基础是理解 Spring 框架的关键,这涉及到 Bean 的定义、管理、装配和生命...

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    通过理解并熟练运用上述知识点,可以更高效地开发Spring Boot应用。博客"17. Spring Boot普通类调用bean【从零开始学Spring Boot】"可能涵盖了这些内容的实践示例和详细解释,建议读者详细阅读以加深理解。

    Spring bean对象实例化实现过程图解

    Spring Bean 对象实例化实现过程图解...Spring Bean 对象实例化实现过程图解是一个复杂的过程,需要了解 BeanDefinitionRegistryPostProcessor 接口、BeanPostProcessor 的注册、getSingleton 方法、createBean 方法和 ...

    spring bean加载

    在Spring框架中,Bean加载是核心功能之一,它关乎到整个应用的生命周期管理和依赖注入。Spring通过XML配置、注解配置或Java配置三种方式来定义Bean,并进行加载。接下来,我们将详细探讨Spring Bean加载的过程及其...

    spring2.5教程(传智)

    5. **Bean的实例化方式**:Spring支持三种实例化Bean的方式:通过构造器、工厂方法和静态工厂方法。每种方式都有其特定的使用场景。 6. **Bean的作用域**:Spring支持singleton(单例)、prototype(原型)、...

    spring一些常用知识点

    在本文中,我们将深入探讨Spring框架的一些核心知识点,以帮助开发者更好地理解和应用这一强大的工具。 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,它允许组件之间的依赖关系在运行时被...

    spring5源码分析笔记

    它从配置文件或注解中读取Bean定义,并根据这些定义实例化Bean。 3. **AOP(面向切面编程)**:Spring的AOP模块支持声明式事务管理、日志记录、性能监控等。切面是包含关注点的模块化单元,可以将横切关注点如事务...

    tutorialspoint_spring:Spring样品实例

    在"tutorialspoint_spring-master"这个压缩包中,可能包含了Spring框架的各种示例代码,涵盖了上述知识点的实践应用。通过学习和运行这些示例,你可以更好地理解Spring如何工作,并能够将其应用到自己的项目中。这些...

    spring实例

    3. **Spring实例化和配置** - **XML配置**: 传统上,Spring应用通过XML配置文件来定义bean及其依赖。 - **Annotation配置**: 使用注解(如@Service、@Repository、@Controller等)可以直接在类上声明bean和依赖。 ...

    基于java的企业级应用开发:Bean的生命周期.ppt

    - **Prototype**:每次请求都会创建一个新的Bean实例,Spring只负责实例化,后续的生命周期由客户端代码控制。 8. **Bean的生命周期流程**: - 从实例化到销毁,Bean经历一系列步骤,包括设置属性、接口回调、...

    spring面试总结

    在实例化Bean时,Spring会根据配置注入对应的参数。 3. Bean的实例化方式: - 类构造器注入:如上述,通过配置文件指定构造器参数。 - 静态工厂实例化:通过调用静态工厂方法创建Bean实例。 - 实例工厂实例化:...

Global site tag (gtag.js) - Google Analytics