自学内容网 自学内容网

Spring依赖注入类型

!!!学习笔记记录!!!

一、概念:

在Spring中实现IoC(控制反转)容器的方法是依赖注入(DI)。

依赖注入的作用就是在使用Spring框架创建对象时,动态地将其所依赖的对象注入Bean组件中,其实现方式通常有两种,一种是属性setter方法注入,另一种是构造方法注入。

二、构造函数注入:

构造方法注入:指IoC容器使用构造方法注入被依赖的实例。基于构造方法的依赖注入通过调用带参数的构造方法来实现,每个参数代表着一个依赖。

1.新建Maven项目后:新建dao包,service包,test包,创建Spring配置文件

2.在dao包中创建TestDIDao接口和接口实现类TestDIDaoImpl.

创建dao包的目的是在service中使用构造方法依赖注入TestDIDao接口对象

TestDIDao接口:

package org.exampletest.dao;

public interface TestDIDao{
    public void sayHello();
}

 TestDIDao接口实现类TestDIDaoImpl:

package org.exampletest.dao;

public class TestDIDaoImpl implements TestDIDao{
    @Override
    public void sayHello() {
        System.out.println("TestDIDao say :Hello,Study hard!");

    }
}

3.在service包中,创建TestDIService接口和接口实现类TestDIServiceImpl

在TestDIServiceImpl中使用构造方法依赖注入TestDIDao接口对象。

TestDIDaoService接口:

package org.exampletest.service;
 public interface TestDIService{
    public void sayHello();
}

TestDIDaoService接口类TestDIServiceImpl:

package org.exampletest.service;

import org.exampletest.dao.TestDIDao;

public class TestDIServiceImpl implements TestDIService{
    private TestDIDao testDIDao;
    //构造方法,用于实现依赖注入接口对象testDIDao
    public TestDIServiceImpl(TestDIDao testDIDao){
        super();
        this.testDIDao = testDIDao;
    }

    @Override
    public void sayHello(){
        //调用testDIDao中的sayHello方法
        testDIDao.sayHello();
        System.out.println("TestDIService 构造方法注入say:Hello,Study Hard!");
    }
}

4.编写配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id = "myTestDIDao" class = "org.exampletest.dao.TestDIDaoImpl"/>

    <bean id = "testDIService" class = "org.exampletest.service.TestDIServiceImpl">
        <constructor-arg index="0" ref = "myTestDIDao"/>
    </bean>

    

</beans>

constructor-arg元素用于定义类构造方法的参数,index用于定义参数的位置,ref指定某个实例的引用,如果参数是常量值,ref由value代替。该代码的构造参数中只有一个参数,位置是”0“.

 5.在test包中创建测试类TestDI:


import org.exampletest.service.TestDIService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDI {
    public static void main(String[] args){
        //初始化Spring 容器ApplicationContext,加载配置文件
        ApplicationContext appCon =new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器获取testDIService实例,测试构造方法注入
        TestDIService ts = (TestDIService)appCon.getBean("testDIService");
        ts.sayHello();

    }
}

图:

三、使用属性的setter方法注入:(最主流的注入方式)

 指IoC容器使用setter方法注入被依赖的实例。通过调用无参构造器或无参静态工厂方法实例化Bean后,再调用该Bean的setter方法,即可实现基于setter方法的依赖注入。

1.在service包下创建一个接口实现类TestDIServiceImpl1

在上面代码的基础上,使用属性的setter方法依赖注入TestDIDao接口对象

package org.exampletest.service;

import org.exampletest.dao.TestDIDao;

public class TestDIServiceImpl1 implements TestDIService{
    private TestDIDao testDIDao;
    public void setTestDIDao(TestDIDao testDIDao){
        this.testDIDao = testDIDao;
    }
    @Override
    public void sayHello(){
        //调用testDIDao中的sayHello方法
        testDIDao.sayHello();
        System.out.println("TestDIService setter方法注入say:Hello,Study Hard!");
    }
}

2.配置文件:

将TestDIServiceImpl1类托管给Spring,让Spring创建其对象,同时调用TestDIServiceImpl1类的setter方法完成依赖注入。


  <bean id = "testDIService1" class = "org.exampletest.service.TestDIServiceImpl1">
        <property name = "testDIDao" ref="myTestDIDao"/>
    </bean>

3.在测试类TestDI中添加测试代码:

TestDIService ts1 = (TestDIService)appCon.getBean("testDIService1");
        ts1.sayHello();

图:


原文地址:https://blog.csdn.net/qq_74474809/article/details/143643503

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!