SSM学习之路——spring第一天_依赖注入

spring中的依赖注入:dependency injection 简称DI
IOC的作用:降低程序间的依赖
依赖关系的管理:交给spring来维护
在当前类需要用到其他类的对象,由spring来为我们提供,我们只需在配置文件中说明依赖关系维护,称为依赖注入

能注入的类型有三类:
1.基本类型和String类
2.其他bean类型(在配置文件中或者注解配置过的bean)
3.复杂类型/集合类型
注入的方式有三种
1.构造函数提供
2.set方法提供
3.注解提供(第二天内容)

一、构造函数注入

1、新建工程,新建接口和类,并创建bean.xml以及测试用的模拟客户端Client
在这里插入图片描述
2、IAccountService接口类写上模拟保存账户的方法
在这里插入图片描述
3、接口的实现类:
这里写了三个类型:String,Integer,以及Date类型,并生成对应的含参的初始化构造函数,调用saveAccount方法来打印初始化后的信息
ps:这里只是演示注入这几个类型的方法,事实上,如果是经常需要变动的数据,我们不要使用注入,比如注册用户的一些信息,是经常需要重新赋值的,这种不要使用注入,再比如像用户的姓名,用户名,密码啊什么的,不经常变动的,我们可以使用注入。故,这里只是一个演示注入这几个类型的方法
在这里插入图片描述
4、bean.xml文件:
用构造器方式注入,标签为<constructor-arg>name为对应的实体类中的字段名称,value为值
可以看到age是Integer类型的,而value为一个字符串类型,则不用担心,因为spring会为我们自动检测和转换类型
但是由于birthdayDate类型,则不能用字符串强转成Date类型,所以这里使用了ref引用已经配置好的类型为Date的bean(这里的Date在实际中,可以使用任意我们自己写的实体类,Date包装类只是一个代表)

在这里插入图片描述
5、运行Client.main()
在这里插入图片描述
运行结果:
在这里插入图片描述
优势:
必须提供对应的参数个数,否则无法完成实例化,减少错误。
弊端:
如果有几个参数是可能用不到的,可以不提供的,则无法完成实例化,比较笨拙

二、set方法注入(常用)

1、将(构造方法注入的)含参构造函数删掉,生成set方法
注意这里,我把set方法的方法名改了,并不和字段名称对应
在这里插入图片描述
2、编写bean.xml
propertyname对应的是实体类中的set方法后面的字符串!
并且忽略首字母的大小写(setusername的u为小写,name对应的Username的U为大写 setAge的A为大写,name对应的age的a为小写)
在这里插入图片描述
优势:
创建对象时没有明显的限制,可以直接使用默认构造函数
弊端:
可以选择不传入某几个参数,比较灵活,但是不能保证必须的参数传入(可能漏传必要参数)

三、集合类型注入

1、方便起见,直接在AccountServiceImpl类中修改
写一些集合对象,生成set方法

package com.itheima.service.impl;

import com.itheima.service.IAccountService;

import java.util.*;

public class AccountServiceImpl implements IAccountService {
    private String[] myStrs;
    private List<String> myList;
    private Map<String,String> myMap;
    private Set<String> mySet;
    private Properties myPros;

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

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

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

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

    public void setMyPros(Properties myPros) {
        this.myPros = myPros;
    }

    public void saveAccount() {
        System.out.println(Arrays.toString(myStrs));
        System.out.println(myList);
        System.out.println(myMap);
        System.out.println(mySet);
        System.out.println(myPros);
    }
}

2、bean中的编写(重要)

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
        <property name="myStrs">
            <array >
                <value>SAAA</value>
                <value>SBBB</value>
                <value>SCCC</value>
            </array>
        </property>
        <property name="myList">
            <list >
                <value>LAAA</value>
                <value>LBBB</value>
                <value>LCCC</value>
            </list>
        </property>
        <property name="mySet">
            <set >
                <value>SAAA</value>
                <value>SBBB</value>
                <value>SCCC</value>
            </set>
        </property>
        <property name="myMap">
            <map>
                <entry key="M1" value="m1"></entry>
                <entry key="M2" value="m2"></entry>
                <entry key="M3" value="m3"></entry>
            </map>
        </property>
        <property name="myPros">
            <props>
                <prop key="p1">prop1</prop>
                <prop key="p2">prop2</prop>
                <prop key="p3">prop3</prop>
            </props>
        </property>
    </bean>
发布了23 篇原创文章 · 获赞 0 · 访问量 600

猜你喜欢

转载自blog.csdn.net/SixthMagnitude/article/details/104106413