【Spring】Spring的依赖注入

一、Spring中的依赖注入
依赖注入(Dependency Injection),也称为DI。
1. 注入的方式有三种:
第一种:使用构造函数注入
第二种:使用set方式注入
第三种:使用注解注入
2. 注入的类型有三类:
第一类:基本类型和String类型
第二类:其他类Bean(必须是在Spring的配置文件中出现过的bean)
第三类:复杂累心(集合类型)
3. 依赖注入具体使用
第一种:构造函数注入
(1)涉及的标签:constructor-arg
(2)标签的属性:
type:指定参数的索引位置,从0开始。
index:指定参数的索引位置,从0开始。
name:指定参数的名称。一般是用此种
====上面三个属性是指定给哪个参数赋值的,下面两个属性是指定赋什么值的=
value:指定基本类型或String类型的数据
ref:指定引用其它数据类型
(3)标签出现的位置:写在bean标签内部
(4)具体实例
ICustomerService的实现类ICustomerServiceImp如下:

//客户的业务层实现类
public class ICustomerServiceImp implements ICustomerService {

    private String driver;
    private Integer port;
    private Date today;

    public ICustomerServiceImp(String driver, Integer port, Date today) {
        this.driver = driver;
        this.port = port;
        this.today = today;
    }

    @Override
    public void saveCustomer() {
        System.out.println("业务层调用持久层"+driver+","+port+","+today);
    }
}

Main函数如下:

public static void main(String[] args) {
//        1.创建容器
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//        2.根据bean的id获取容器
        ICustomerService customerService = (ICustomerService) context.getBean("ICustomerServiceImp");
        customerService.saveCustomer();
    }

xml配置文件如下:

<bean id="ICustomerServiceImp" class="com.renjing.service.imp.ICustomerServiceImp">
        <constructor-arg name="driver" value="com.mysql.jdbc.Driver"></constructor-arg>
        <constructor-arg name="port" value="3306"></constructor-arg>
        <constructor-arg name="today" ref="now"></constructor-arg>
    </bean>
    <bean id="now" class="java.util.Date"></bean>

第二种:set方法注入
(1)涉及的标签:property
(2)标签的属性:
name:指定参数的set方法名称
===上面一个属性是指定给哪个参数赋值的,下面两个属性是指定赋什么值的=
value:指定基本数据类型或String类型的数据
ref:指定其他bean类型数据
(3)标签出现的位置:
写在bean标签内部。
(4)具体实例
ICustomerService2 的实现类ICustomerService2Imp2如下:

//客户的业务层实现类
public class ICustomerServiceImp2 implements ICustomerService2 {

    private String driver;
    private Integer port;
    private Date today;

    public ICustomerServiceImp2() {
    }

    public ICustomerServiceImp2(String driver, Integer port, Date today) {
        this.driver = driver;
        this.port = port;
        this.today = today;
    }


    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public Integer getPort() {
        return port;
    }

    public void setPort(Integer port) {
        this.port = port;
    }

    public Date getToday() {
        return today;
    }

    public void setToday(Date today) {
        this.today = today;
    }

    @Override
    public void saveCustomer() {
        System.out.println("业务层调用持久层"+driver+","+port+","+today);
    }
}

xml配置文件如下:

<bean id="ICustomerService2" class="com.renjing.service.imp.ICustomerServiceImp2">
        <property name="driver" value="com.mysql.jdbc.Driver"></property>
        <property name="port" value="3307"></property>
        <property name="today" ref="now"></property>
</bean>

Mian函数如下:

public static void main(String[] args) {
//        1.创建容器
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//        2.根据bean的id获取容器
        ICustomerService2 customerService2 = (ICustomerService2) context.getBean("ICustomerService2");
        customerService2.saveCustomer();
    }

执行结果如下:
在这里插入图片描述
第三种:复杂类型的注入
(1)注意:结构相同,标签可以互换
(2)具体实例
ICustomerService3的具体实现类ICustomerServiceImp3如下:

//客户的业务层实现类
public class ICustomerServiceImp3 implements ICustomerService3 {

    private String[] myStrs;
    private List<String> myList;
    private Set<String> mySet;
    private Map<String,String> myMap;
    private Properties myProps;

    public String[] getMyStrs() {
        return myStrs;
    }

    public void setMyStrs(String[] myStrs) {
        this.myStrs = myStrs;
    }

    public List<String> getMyList() {
        return myList;
    }

    public void setMyList(List<String> myList) {
        this.myList = myList;
    }

    public Set<String> getMySet() {
        return mySet;
    }

    public void setMySet(Set<String> mySet) {
        this.mySet = mySet;
    }

    public Map<String, String> getMyMap() {
        return myMap;
    }

    public void setMyMap(Map<String, String> myMap) {
        this.myMap = myMap;
    }

    public Properties getMyProps() {
        return myProps;
    }

    public void setMyProps(Properties myProps) {
        this.myProps = myProps;
    }

    @Override
    public void saveCustomer() {
        System.out.println(Arrays.toString(myStrs));
        System.out.println(myList);
        System.out.println(mySet);
        System.out.println(myMap);
        System.out.println(myProps);
    }
}

xml配置文件如下:注意:结构相同,标签可以互换,故未匹配相应的类型

<bean id="ICustomerService3" class="com.renjing.service.imp.ICustomerServiceImp3">
        <property name="myStrs">
            <set>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </set>
        </property>
        <property name="myList">
            <array>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </array>
        </property>
        <property name="mySet">
            <list>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </list>
        </property>

        <property name="myMap">
            <props>
                <prop key="testF">FFF</prop>
                <prop key="testR">RRR</prop>
            </props>

        </property>
        <property name="myProps">
            <map>
                <entry key="TestD" value="DDD"></entry>
                <entry key="TestE">
                    <value>EEE</value>
                </entry>
            </map>
        </property>
    </bean>

Mian函数如下:

public static void main(String[] args) {
//        1.创建容器
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//        2.根据bean的id获取容器
        ICustomerService3 customerService3 = (ICustomerService3) context.getBean("ICustomerService3");
        customerService3.saveCustomer();
    }

执行结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/renjingjingya0429/article/details/88385633