一、引入

1.OCP开闭原则

软件开发过程中应对扩展开放,对修改关闭。即进行功能扩展时可以添加额外的类,但是不能修改原本正常运行的程序。违背此原则的主要原因是:代码与代码之间的耦合性太高。

2.依赖倒置原则(Dependence Inversion Principle)

简称DIP,倡导面向抽象编程,面向接口编程,而非面向具体编程,让上层不依赖下层,从而大大降低程序的耦合度,增强程序的可扩展性和可复用性。
但面向接口编程时,会出现一些问题,例如

public class UserServiceImpl implements UserService{
 //service服务层调dao持久层
  private UserDao userDao;
  public void login(...){
    ...userDao.search()...
  }
}

此时userDao为null,会出现空指针异常。要解决空指针 的问题,实质就是解决两个核心问题:

  • 谁来负责new对象(对象的创建)
  • 谁来将创建好的对象赋值给属性,即new好的对象赋值给userDao,实质上就是让dao对象和service对象产生关系

而Spring框架可以解决这两个问题。在Spring框架中,它既可以帮助我们创建对象,还可以帮助我们维护对象和对象之间的关系。很显然,这种方式是将对象的创建权对象与对象之间关系的管理权交出去,不再使用硬编码的方式。这种方式成为控制反转

3.控制反转IoC(Inversion of Control)

一种设计思想,可用于降低代码之间的耦合性,符合依赖倒置原则。IoC的核心是:将对象的创建权和对象关系的管理权交给第三方容器创建与维护
IoC思想常见的实现方式:依赖注入(Dependecy Injection:DI)。依赖注入的实现方式又包括两种:

  • set方式注入
  • 构造方法注入

Spring容器就是一个实现了IoC思想的容器,IoC可认为是一种全新的设计模式,并没有包括在GoF(23种设计模式)中

二、Spring入门程序

idea可用jdk版本对照
由于Spring6最低支持JDK17,所以IDEA 专业版请选择2021.2版本之后的。
IDEA2023专业版破解
在创建的模块中,

  1. 在pom.xml文件中配置所需依赖
  2. 定义bean
  3. 编写spring的配置文件(该文件放在类的根路径下,即resource包下
<?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">
    
    <bean id="userBean" class="com.lw.spring6.bean.User"/>
</beans>

id属性:代表bean对象的唯一标识
class属性:用来指定要创建的java对象的类名

  1. 创建测试程序
package com.lw.spring6.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Spring6Test {
    @Test
    public void testFirst(){
        // 初始化Spring容器上下文(解析beans.xml文件,创建所有的bean对象)
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
        // 根据id获取bean对象
        Object userBean = applicationContext.getBean("userBean");
        System.out.println(userBean);
    }
}

Spring创建对象的本质利用了反射机制调用无参构造方法来创建。
// dom4j解析beans.xml文件,从中获取class的全限定类名
// 通过反射机制调用无参数构造方法创建对象
Class clazz = Class.forName(“com.powernode.spring6.bean.User”);
Object obj = clazz.newInstance();

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐