Spring中Bean的注入方式详解(4)

public class BookFactory {
    public Book buyBook(){
        Book book = new Book();
        book.setName("Think in Java");
        return book;
    }

}

配置文件编写:

<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->

<!-- 配置对象 -->
    <bean></bean>
    <bean factory-bean="bookFactory" factory-method="buyBook"></bean>
   
</beans>

  由于bookFactory的工厂方法不是静态的,因此需要先定义一个工厂类的bean,然后通过factory-bean属性来引用工厂bean实例。再通过属性factory-method来指定对应的工厂方法。

【静态工厂方法】

  很多工厂类方法都是静态的,这意味着无需创建工厂类实例的情况下就可以调用工厂类方法。因此静态工程方法比非静态工厂方法的调用更加方便简洁。下面通过一个实例来演示静态工厂方法。

编写factory类:

package com.Kevin.factorybean;
/**
 * 编写工厂类测试静态工厂方法注入
 * @author Kevin
 *
 */

public class CarFactory {
    public static Car createCar(){
        Car car = new Car();
        car.setBrand("Lamborghini");
        return car;
    }

}

编写配置文件:

<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->

<!-- 配置对象 -->
    <bean factory-method="createCar"></bean>
   
</beans>

总结

  Spring提供了三种可供选择的注入方式,但在实际应用中,我们究竟该选择哪种注入方式,并没有统一的标准,如下是一些可以参考的理由:

  构造函数注入理由:

构造函数保证重要属性预先设置;

无需提供每个属性的setter方法,减少类的方法个数;

可以更好地封装类变量,避免外部错误调用。

  属性注入理由:

属性过多时,构造函数变的臃肿;

构造函数注入灵活性不强,有时需要为属性注入null值;

多个构造函数时,配置上产生歧义,复杂度升高;

构造函数不利于类的继承和扩展;

构造函数注入会引起循环依赖的问题。

  其实Spring为我们注入参数提供了这么多方法,那么这些方法必然有他们存在的道理,每个方法在某一问题上会有独特的优势,我们只需要按照我们具体的使用需求选择适合的方法来使用就好了,但一般不太推荐工厂方法注入。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/4f30f7ef1566725949f1f3149da0318c.html