当前位置: 首页 > news >正文

Spring学习阶段性总结

Spring的核心功能之一就是反转控制(IOC),也就是把对成员变量赋值的控制权,从程序员写的代码反转到Spring工厂和配置文件中。

我们之所以需要IOC是因为把创建对象(New)的过程放在了XML配置文件里,所以当我们需要换一个实现子类将会变成很简单(项目不需要重新编译);其次,当他人使用代码时不需要关心对象创建的过程,由第三方的Spring工厂直接提供即可。

IOC底层通过工厂模式来实现,最大的好处之一就是解耦合。而在编程的逻辑中,耦合是不可能被消除的,只能通过转移到更上一层,Spring工厂正是把经过层层抽象得出来的一个核心的逻辑放在了xml配置文件中,从而转移了需要编译的代码中的耦合。而放在xml文档中的耦合部分往往是经常需要修改的代码部分,从而也避免了项目需要重新编译的过程;当其他程序员需要修改代码时,直接看xml文档也会更方便。

工厂模式简单来说就是将实例化某一类对象具体分给对应的工厂,而不是在一个工厂里通过依赖具体的参数来创建。工厂模式的本质就是对获取对象过程的抽象。

1、Spring工厂创建的对象也叫bean或组件。

在获取bean的过程中我们主要通过配置文件中bean的唯一标识 ‘id’ 值来getBean,类似如下代码段中的 ‘person1’ 即为唯一标识,name可以理解为小名,作用类似于 ‘id’。

    <bean id = "person1" name = "person" class="com.fanss.pojo.Person">

2、我们通过new创建对象时,如需要为对象赋值一般可通过有参构造或者set方法进行赋值。而经过反转控制后,创建对象的权限已经不在我们手中,此时,如果我们需要为对象的成员变量赋值时,我们就需要通过Spring注入来实现。

Spring注入本质上还是通过调用对象的set方法来完成的,所以在使用依赖注入前必须在相应的类中生成对应成员变量的set方法。之后Spring在底层替我们在合适的时机(调用构造方法后)调用对应属性的set方法。

Set注入支持的参数类型大体分为两类,一类是JDK类型的系统成员变量,还有一类时用户自定义类型的成员变量。

JDK类型主要包括:8种基本类型+String类型、数组、Set、List类型、Map类型、Properties类型。

用户自定义类型主要是指,其他对象作为本类的成员变量时,Spring注入也需要相应的定义。

3、对于JDK类型的成员变量,Set注入方法如下所示:

public class Person {
    private Integer id;
    private String name;
    private String[] emails;
    private Set<String> tels;
    private List<String> address;
    private Map<String,String> qqs;
    private Properties properties;
    生成set方法();
}

下面通过Spring工厂创建对象,并为该对象的属性进行set注入:

    <bean id = "person1" name = "person" class="com.fanss.pojo.Person">
        <property name="id" value="10"/>
        <property name="name" value="fanss"/>
        <property name="tels">
            <set>
                <value>112323</value>
                <value>111111</value>
            </set>
        </property>
        <property name="qqs">
            <map>
                <entry>
                    <key><value>fan</value></key>
                    <value>1513333</value>
                </entry>
                <entry>
                    <key><value>li</value></key>
                    <value>9999999</value>
                </entry>
            </map>

        </property>
    </bean>

4、对于有用户自定义类型变量属性的对象,创建方法如下:

public class UserServiceImpl implements UserService {
    private UserDAO userDAO ;

    public UserDAO getUserDAO() {
        return userDAO;
    }

    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

}

可以看出UserDao作为UserServiceImpl的成员变量,当Spring工厂为我们创建UserServiceImpl对象后,若对userDao进行注入,必须要为userDAO进行配置,其具体的配置方法如下:


    <bean id = "userDAO" class="com.fanss.mapper.UserDaoImpl"/>

    <bean id="userService" class="com.fanss.Service.UserServiceImpl">
        <property name="userDAO" ref="userDAO"/>
<!--        以下语句可以简化为以上↑-->
<!--        <property name="userDAO">-->
<!--            <ref bean="userDAO"/>-->
<!--            如果经常使用一个bean就可以提出来,若只是使用一次则直接声明即可-->
<!--            <bean class="com.fanss.mybatis_01.mapper.UserDaoImpl"/>-->
<!--        </property>-->
    </bean>

可以看出userDAO也是通过Spring工厂进行实例化的。

相关文章:

  • 做pc端网站一般多少钱/河南网站推广那家好
  • 笔记本销售网站开发的背景/如何制作简易网站
  • wordpress公式 插件/微信小程序怎么做店铺
  • 布吉网站建设哪家效益快/求几个微信推广平台
  • 百度权重查询工具/关键词优化排名软件推荐
  • 私人网站开发公司/文职培训机构前十名
  • CET4之翻译
  • 简单了解泛型和包装类
  • 串口使用系列学习之什么是流控
  • centos7安装docker
  • 前端基石:构造函数和普通函数
  • MySQL索引-3回表查询与覆盖索引
  • 【机器学习】阿里云天池竞赛——工业蒸汽量预测(5)
  • 可编程交换机P4网络资源
  • HTTP版本 四次挥手 同源策略
  • fastapi_No.7_获取表单和文件数据
  • YOLOX 学习笔记
  • 6.链表篇2链表的介绍和实现(单/双链表)