扫码关注微信公众号

回复“面试手册”,获取本站PDF版

回复“简历”,获取高质量简历模板

回复“加群”,加入程序员交流群

回复“电子书”,获取程序员类电子书

当前位置: Java > Spring高频面试题 > 11.依赖注入的方式有哪些?

常用的依赖注入方法有构造函数注入和属性注入,除此之外,Spring还支持工厂方法注入。

在前面介绍Spring IoC时已经介绍过构造方法注入了,接下来简单介绍下属性注入和工厂方法注入

属性注入

属性注入是使用频率非常高的依赖注入方法,具体如下

class Car{
    private int price;
    private String name;
    public void setPrice(int price){
        this.price = price;
    }
    public void setName(String name){
        this.name = name;
    }

    public void printCar(){
        System.out.println("carName:" + name + " carPrice:" + price);
    }
}

applicationContext.xml文件中配置参数值

<bean id="car" class="dao.Car">
    <property name="price"><value>100</value></property>
    <property name="name"><value>小推车</value></property>
</bean>

测试

class test{
    public static void main(String[] args) {
        //初始化Spring容器ApplicationContext,加载配置文件
        ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
        Car car = application.getBean(dao.Car.class);
        car.printCar();
    }
}

输出

carName:小推车 carPrice:100

工厂方法注入

由于Spring IoC容器以框架的形式提供工厂方法的功能,很少需要手动编写基于工厂方法的类,所以工厂方法注入并不常用,可以简单了解一下。 工厂方法注入可以分为静态方法注入非静态方法注入

静态方法注入

除了上面Car类,还需要先创建一个工厂类

class CarFactory{
    public static Car creatCar(){
        Car car = new Car();
        car.setName("路人车");
        car.setPrice(200);
        return car;
    }
}

配置applicationContext.xml,需要指定静态方法及工厂类

<bean id="car2" class="dao.CarFactory" factory-method="creatCar"/>

测试

class test{
    public static void main(String[] args) {
        //初始化Spring容器ApplicationContext,加载配置文件
        ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
        Car car = (Car) application.getBean("car2");
        car.printCar();

    }
}

输出

carName:路人车 carPrice:200
非静态方法注入

非静态方法注入相比于静态方法注入要费事一些,因为需要先实例化工厂类后才可以调用工厂方法,这也是类和静态类的区别

还是先创建工厂类,这次是非静态的

class CarFactory{
    public  Car creatCar(){
        Car car = new Car();
        car.setName("路人车");
        car.setPrice(300);
        return car;
    }
}

配置applicationContext.xml,和静态工厂方法不同,需要先实例化工厂类,所以先配置了一个工厂bean,并将car2的factory-bean指向工厂bean,factory-method指向工厂的方法

<bean id="carFactory" class="dao.CarFactory"/>
<bean id="car2" factory-bean="carFactory" factory-method="creatCar"/>

测试

class test{
    public static void main(String[] args) {
        //初始化Spring容器ApplicationContext,加载配置文件
        ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
        Car car = (Car) application.getBean("car2");
        car.printCar();
    }
}

输出

carName:路人车 carPrice:300

点击面试手册,获取本站面试手册PDF完整版