`

spring 通过工厂来创建bean

阅读更多
1: 这个例子中我们使用工厂模式来取的bean。首先我们来获取context

public class SpringContextSupport implements ServletContextAware {

    private static Object initObj = null;

    private static int count = 0;

    private static ApplicationContext context;

    public static void init(Object o) {
        initObj = o;
        count++;
    }

    /**
     *
     * gets the instance from the beanId
     *
     * @param object
     * @return void
     */
    public static Object getBean(String beanName) {
        return getApplicationContext().getBean(beanName);
    }

    /**
     *
     * returns applicationContext based on initObj
     *
     * @return ApplicationContext
     */
    public static ApplicationContext getApplicationContext() {
        if (initObj == null) {
            throw new IllegalStateException(
                    "Application context not initialized");
        } else if (initObj instanceof ServletContext) {
            ServletContext servletContext = (ServletContext) initObj;
            return WebApplicationContextUtils
                    .getRequiredWebApplicationContext(servletContext);

        } else if (initObj instanceof String) {
            if (context == null) {
                context = new FileSystemXmlApplicationContext(
                        Constants.FILE_CONTEXT_PATH);
            }
            return context;
        } else {
            throw new IllegalStateException(
                    "You must initialize the context with a String");
        }
    }

    /**
     *
     * initializes servletContext
     *
     * @param context
     * @return void
     */
    public void setServletContext(ServletContext context) {
        init(context);
    }

    public static void initializeStandalone() {
        init("StandAlone");
    }


    /**
*
* initializes servletContext for bid board batch
*
* @param context
* @return void
*/
    public static void initBidBoardBatch() {
        init( Constants.BB_BATCH_STARTUP);
    }
}

备注: String FILE_CONTEXT_PATH = "WEB-INF/conf/user-services.xml";
那么在这个文件中就是我们配置的bean
2: 具体通过工厂是方法来取得我们所需要的bean
public class DAOFactory {
  public UserDAO getUserDAO() throws Exception {
        UserDAO userDAO = null;
        try {
            userDAO = (UserDAO) SpringContextSupport
                    .getBean(DAOConstants.USER_DAO);
        } catch (Exception exception) {
            throw exception;
        }
        return userDAO;
    }
}

3: 那么我们想对应的service工厂模式的创建也类似:如下:
public class CommonServiceFactory {
   public CommonService getCommonService() throws BBSystemException {
        CommonService commonService = null;

        commonService =
                (CommonService) SpringContextSupport
                        .getBean(BBServiceConstants.COMMON_SERVICE);

        if (null == commonService) {
            throw BBUtil.getBBSystemException(BBMessageConstants.OBJECTS_NULL);
        }
        return commonService;
    }
}
分享到:
评论

相关推荐

    Spring框架通过工厂创建Bean的三种方式实现

    本文将详细阐述Spring通过工厂创建Bean的三种方式。 ### 1. 静态工厂 静态工厂是一种不依赖于实例化就能创建对象的方法,它通过类的静态方法来生成Bean。这种方式中,工厂类不需要被实例化,直接调用静态方法即可...

    Spring Bean创建初始化流程.docx

    在`doCreateBean()`方法中,Spring会创建Bean的实例,`createBeanInstance(beanName, mbd, args)`执行Bean实例的创建,而`populateBean(beanName, mbd, instanceWrapper)`则负责填充Bean的属性,将依赖注入到Bean中...

    Spring工厂方法创建(实例化)bean实例代码

    Spring框架中提供了多种方式来创建bean实例,包括通过构造器、静态工厂方法和实例工厂方法等。这种方式可以让开发者更好地控制bean的创建过程,实现更多的自定义需求。 通过构造器方式创建bean实例 在Spring中,...

    Spring实战之使用静态工厂方法创建Bean操作示例

    在Spring框架中,静态工厂方法是一种创建Bean对象的方式,它允许我们通过调用类中的静态方法来实例化对象,而不是直接使用new关键字。这种方式在某些特定场景下非常有用,例如当我们需要控制对象的创建过程或者对象...

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

    Spring通过Bean工厂和ApplicationContext来实现这一功能。 在Java代码中创建Bean,我们需要创建一个类,并使用`@Component`、`@Service`、`@Repository`或`@Controller`注解来标记。这些注解都是Spring的@...

    09-IoC配置-静态工厂与实例工厂创建bean

    Spring IOC 04 配置通过静态工厂方法创建的bean、实例工厂创建的bean、FactoryBean (1)bean的创建默认就是框架利用反射new出来的bean实例; (2)工厂模式:工厂帮我们创建对象,有一个专门帮我们创建对象的类,这...

    spring学习----工厂Bean

    Bean可以通过简单的构造函数、工厂方法或工厂Bean来创建。 工厂Bean是实现了`org.springframework.beans.factory.FactoryBean`接口的类。这个接口定义了两个核心方法:`getObject()`用于返回实际的业务对象,`...

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

    静态工厂方法与实例工厂方法类似,区别在于它不依赖于工厂类的实例,而是直接调用工厂类的静态方法来创建Bean。配置如下: ```xml <bean id="exampleBean" factory-class=...

    Spring bean 管理

    Spring通过工厂模式设计了一系列工厂类来创建对象。在早期版本中,主要通过BeanFactory和ApplicationContext两个工厂类来管理Bean的生命周期。ApplicationContext是BeanFactory的子接口,提供了更为丰富的功能。 2....

    Spring Bean重复执行两次(实例被构造两次)问题分析

    4. **静态工厂方法或Singleton作用域**:如果使用静态工厂方法创建Bean,且未正确配置单例模式,那么每次请求都会创建新的Bean实例。对于Singleton作用域的Bean,Spring保证在整个容器生命周期内只有一个实例,如果...

    模拟spring工厂模式底层实现。

    3. **依赖注入**:Spring会根据BeanDefinition中的依赖关系,通过设值注入(setter方法)或构造器注入来创建Bean实例。 4. **初始化**:Spring会调用Bean的初始化回调方法,即带有@PostConstruct注解的方法或init-...

    JavaEE spring静态工厂创建实例

    总的来说,JavaEE Spring中的静态工厂创建实例是一种高级的DI实现方式,它提供了更多的灵活性和控制力,但同时也增加了代码的复杂性。理解并合理运用静态工厂方法,可以帮助我们更好地设计和组织应用程序的架构。在...

    Spring项目bean实例化代码

    在Spring配置文件中,可以通过`<bean>`标签的`constructor-arg`子标签来指定构造函数参数,Spring会根据这些参数调用相应的构造函数来创建Bean实例。例如: ```xml <bean id="exampleBean" class=...

    spring bean 属性总结

    - **factory-bean/factory-method属性**:通过工厂方法创建Bean。`factory-bean`属性指向工厂Bean,而`factory-method`属性指定工厂方法。 - **depends-on属性**:指定Bean的依赖关系,确保某些Bean在其他Bean之前...

    spring 实例的工厂方法 依赖注入属性,都使用property 元素确

    ·调用实例工厂方法创建bean 时,必须使用factory-bean 属性来确定工厂bean。 而静态工厂方法则使用class 元素确定静态工厂类。 其相同之处如下: ·都需使用factory-method属性指定产生bean 实例的工厂方法。 ...

    Spring Bean生命周期&BeanDefinitions1

    1. **实例化**:这是生命周期的第一步,Spring通过反射或者工厂方法来创建Bean的实例。根据`<bean>`标签中的`class`属性,Spring确定Bean的类型并进行实例化。 2. **属性注入**:接着,Spring会利用依赖注入...

    第一章 Spring4 简介及获取Bean

    依赖注入是Spring框架的一个核心特性,它允许将对象之间的依赖关系通过外部容器来管理,而不是由对象内部自行创建。这样做的好处是提高了代码的可测试性和可维护性,因为对象的依赖关系可以更容易地被模拟或替换。 ...

    SSH笔记-静态/实例工厂方法配置bean

    在Spring框架中,Bean的创建方式多样,其中两种常见的非XML配置方式是通过静态工厂方法和实例工厂方法来创建Bean。这些方法为Spring容器提供了更灵活的Bean实例化策略,让我们深入了解一下这两种方法。 首先,静态...

    SSH笔记-通过实现FactoryBean接口来创建 Bean

    本笔记将详细探讨如何通过实现`FactoryBean`接口来创建Bean,以及在Spring4中如何应用这一特性。 `FactoryBean`是Spring提供的一个接口,它提供了一种方式,让我们能够控制对象的创建过程。当你在Spring配置文件中...

    Spring 实例化Bean的三种方式

    除了构造器注入,Spring还支持通过静态工厂方法来创建Bean实例。这种方式不需要Bean类提供构造器,而是通过调用一个静态工厂方法来创建Bean。这种方法的优势在于它可以提供更多的灵活性,例如可以在创建Bean时进行...

Global site tag (gtag.js) - Google Analytics