IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring学习阶段性总结 -> 正文阅读

[Java知识库]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工厂进行实例化的。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:18:51  更:2022-10-17 12:23:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/30 14:00:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码