Spring 学习笔记01 - Spring 入门

1. 什么是 Spring

  • Spring 是 Java 应用最广的轻量级开源框架,它的成功来源于理念,而不是技术本身,它的理念包括IoC(Inversion of Control,控制反转)AOP(Aspect Oriented Programming,面向切面编程)

2. 对 IoC 的理解

  • IoC - Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在 Java 开发中,IoC 意味着将原本在程序中手动创建对象的控制权,交给了 Spring 框架来管理
    • 正控:若要使用某个对象,需要自己负责创建对象,即我们经常写的 “new Object()”
    • 反控:若要使用某个对象,Spring 容器会帮忙创建,我们只需从容器中获取需要使用的对象,无需关心对象的创建过程
    • 好莱坞法则:Don’t call me ,I’ll call you
  • 作用:降低程序之间的耦合(依赖关系)

  • 我们通过一个模拟添加用户的简单案例来进一步了解
  1. 导入依赖
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>
  1. 创建 dao 层接口和实现类
public interface UserDao {
    void saveUser();
}

public class UserDaoImpl implements UserDao {
    @Override
    //模拟保存用户
    public void saveUser() {
        System.out.println("保存用户到数据库");
    }
}
  1. 编写 applicationContext.xml 配置文件
<?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">
    <!-- 把对象的创建交由 Spring 来管理 -->
    <bean id="userDao" class="com.hn.dao.impl.UserDaoImpl"></bean>
</beans>
  1. 编写测试类模拟 service 层获取 dao 层对象
public class SpringTest {
    public static void main(String[] args) {
        //获取核心容器对象
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

        /*以往的方式
        UserDao us = new UserDaoImpl();*/

        //根据 id 获取依赖对象
        UserDao us = (UserDao) ac.getBean("userDao");

        System.out.println(us);
        //执行依赖对象保存用户方法
        us.saveUser();
    }
}
  1. 运行测试类,可以正常拿到 xml 配置的 bean
    在这里插入图片描述

  2. 总结
    传统方式:通过 new 关键字主动创建一个对象
    IoC方式:Spring 帮你创建了对象并保存在一个“容器”中,需要时直接从容器里拿。

3. 对 DI 的理解

  • DI - Dependency Injection,即“依赖注入”:由容器动态的将某个依赖关系注入到组件之中,是 Spring 框架核心 IoC 的具体实现.
  1. 继续上面的例子,在接口实现类中添加属性;
public class UserDaoImpl implements UserDao {
    private String name;
    private Date time;
	/* setter and getter */
    @Override
    public void saveUser() {
        System.out.println("保存用户到数据库");
        System.out.println("名称:" + getName() + ",保存时间:" + getTime());
    }
}
  1. 修改 applicationContext.xml 配置文件
    <!-- 把对象的创建交由 Spring 来管理 -->
    <bean id="userDao" class="com.hn.dao.impl.UserDaoImpl">
        <!-- 设值注入 -->
        <property name="name" value="张三"></property>
        <property name="time" ref="time"></property>
    </bean>
    <!-- 配置一个日期对象用于注入到 useDao 中 -->
    <bean id="time" class="java.util.Date"></bean>
</beans>
  1. 运行测试类
    在这里插入图片描述
  • 总结:
    在 Spring 中实现“控制反转”的是 IoC 容器,其实现方法是“依赖注入”
    IoC 和 DI 其实是同一个概念的不同角度描述,DI 相对 IoC 而言,“依赖注入”明确描述了“被注入对象 依赖 IoC 容器配置 依赖对象
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值