以activiti配置文件为例介绍Spring管理的bean工厂

标签: activiti Spring
62人阅读 评论(0) 收藏 举报
分类:

配置工厂Bean
通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象.
一般情况下,应用程序有自己的工厂对象来创建bean.如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean.
得到对象的方式有两种:
1.调用getBean()方法,Spring返回的不是直接创建的Bean的实例,而是由工厂Bean创建的Bean实例.
2.通过Spring的注解@Autowired得到配置文件配置过的对象。

简要分析下配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                 http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-2.5.xsd
                                http://www.springframework.org/schema/tx
                                    http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
                                          http://cxf.apache.org/jaxws 
                                            http://cxf.apache.org/schemas/jaxws.xsd
                                            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

        <!-- Activiti begin
             Activiti的核心工作对象processEngine依赖于这个类(SpringProcessEngineConfiguration),
             SpringProcessEngineConfiguration是核心配置文件,通过这个对象加载一些配置文件。
             这个bean中有三个属性:
             name:依赖的属性的名称,他决定着使用这个对象或者属性的名称。
             value:依赖的这个属性是一个单独的属性,不是对象,他的值是这个属性的值。
             ref:依赖的这个属性是一个bean对象,这个bean对象在这个配置文件中已经配置了这个bean,配置的id是ref的值。
         -->
    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <property name="dataSource" ref="FJMSDataSource"/>
        <property name="transactionManager" ref="transactionManager"/>
        <property name="databaseSchemaUpdate" value="true"/>
        <property name="jobExecutorActivate" value="false"/>
        <property name="history" value="full"/>
        <property name="processDefinitionCacheLimit" value="10"/>
    </bean>

    <!-- 这个是activiti的核心类,这个类依赖另一个类processEngineConfiguration -->
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <property name="processEngineConfiguration" ref="processEngineConfiguration"/>
    </bean>

    <!--通过ProcessEngineFactoryBean加载的对象可以得到以下这些对象。得到这些对象的方式是通过工厂模式得到的。
        factory-method:通过工厂中的这个方法可以得到这个对象。
        factory-bean:工厂依赖的bean对象,他的值是依赖的bean对象的id值。
    -->
    <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
    <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/>
    <bean id="formService" factory-bean="processEngine" factory-method="getFormService"/>
    <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>
    <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>
    <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>
    <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService"/>
    <!-- Activiti end -->

    <context:annotation-config />
    <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能-->
    <aop:aspectj-autoproxy />

    <context:annotation-config />
    <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能-->
    <aop:aspectj-autoproxy />
</beans>
查看评论

Spring初探之bean工厂(上)

Spring是什么?Spring的中文名是春天,它是软件开发人的春天,是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。我以一个简单的示例解构spring是怎样管理java对象的。 首...
  • Windy83
  • Windy83
  • 2012-03-28 23:22:35
  • 7010

Spring 使用实例工厂方法实例化Bean

知识点介绍:         实例工厂的意思是获取对象实例的方法不是静态的,所以你需要首先new工厂类,再调用普通的实例方法。 【转载使用,请注明出处:http://blog.csdn.net/m...
  • ma_hoking
  • ma_hoking
  • 2014-12-20 22:00:24
  • 2398

工厂模式模拟Spring的bean加载过程

Spring工厂模式 1 工厂接口 2 工厂实现 3 模拟Spring中bean的配置
  • answer100answer
  • answer100answer
  • 2017-08-23 23:03:45
  • 262

spring学习小结7_使用工厂方法来配置bean:静态工厂方法和实例工厂方法

使用工厂方法来配置bean:静态工厂方法和实例工厂方法 静态工厂方法:将对象创建的过程封装到另外一个类的静态方法中。当客户端需要对象时,只需要简单地调用工厂方法,而不需要关心对象创建 的细节。 ...
  • u012574931
  • u012574931
  • 2016-02-26 12:13:42
  • 446

spring中通过静态工厂方法获取bean实例化对象

1:bean package com.study.spel; public class Car {      private String brand; private String...
  • pangqiandou
  • pangqiandou
  • 2016-11-20 14:29:29
  • 1984

Spring Bean工厂创建Bean实例的方法之使用工厂类

定义接口: package Bean.FactoryMethods;public interface Axe ...{   public String chop();}package Bean.Fac...
  • daryl715
  • daryl715
  • 2007-03-23 17:54:00
  • 3272

Spring 使用静态工厂方式实例化Bean

知识点介绍:静态工厂顾名思义,就是通过调用静态工厂的方法来获取自己需要的对象,为了让spring管理所有对象,我们不能直接通过"工程类.静态方法()"来获取对象,而是依然通过spring注入的形式获取...
  • ma_hoking
  • ma_hoking
  • 2014-12-20 21:00:47
  • 3630

Spring通过工厂方法配置Bean

通过静态工厂方法配置Bean1、调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,当客户端需要对象时,只需要简单地调用静态方法,而不用关心创建对象的细节 2、要声明通过静态方法创建的B...
  • jyxmust
  • jyxmust
  • 2017-02-01 23:56:46
  • 3570

Spring Bean工厂创建Bean实例的方法之使用静态工厂类

定义接口: package Bean.staticFactoryBean;public interface Axe ...{   public String chop();}package Bean....
  • daryl715
  • daryl715
  • 2007-03-23 17:21:00
  • 3884
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 918
    排名: 5万+