微信公众号:路人zhang
网站救助计划

1.为阅读体验,本站无任何广告,也无任何盈利方法,站长一直在用爱发电,现濒临倒闭,希望有能力的同学能帮忙分担服务器成本


2.捐助10元及以上同学,可添加站长微信lurenzhang888,备注捐助网站倒闭后可联系站长领取本站pdf内容


3.若网站能存活下来,后续将会持续更新内容

当前位置: 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

本站链接:https://www.mianshi.online如需勘误或投稿,请联系微信:lurenzhang888


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