Spring6 基础入门

1. spring是什么

Spring是一款主流的Jave EE轻量级开源框架,Spring 由"spring 之父 Rod Johnson"提出并创立,且目的是用于简化Jave企业级应用的开发难度和开发周期,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring框架除了自己提供功能外,还提供整合其他技术和框架的能力。

Spring自诞生以来备受青睐,一直被广大开发人员作为Jave企业级应用程序开发的首选。时至今日,Spring俨然成为了Java EE 代名词,成为了构建JavaEE应用的事实标准。

自2004年4月,Spring1.0版本正式发布以来,Spring已经步入到了6个大板本,也就是Spring6。

2. Spring狭义和广义的划分

广义:泛指以Spring Framework为核心的Spring技术栈。经过十多年的发展,Spring已经不再是一个单独的应用框架,而是逐渐发展成为一个由多个不同子项目(模块)组成的成熟技术,例如Spring Framework、Spring MVC、Spring Boot、Spring Cloud等。其中Spring framework是其他项目的基础。

狭义:特指Spring Framework,通常我们称他为Spring 框架。spring 有俩个最核心模块:IoC 和 AOP。

3. Spring Framework的特点

  • 非侵入式:使用spring Framework开发应用程序时,spring对应用程序本身的结构影响非常小。对领域模型可以做到零污染;对功能性组件也只需要使用几个简单的注解进行标记,完全不会破坏原有结构,反而能将组件结构进一步简化。这就使得基于spring Framework开发应用程序时结构清晰、简洁优雅。
  • 控制反转:IOC--Inversion of Control,翻转资源获取方向。把自己创建资源、向环境索取资源变成环境将资源准备好,我们享受资源注入。
  • 面向切面编程:AOP--Aspect Oriented Programming,在不修改源代码的基础上增强代码功能。
  • 容器:Spring IOC 是一个容器,因为它包含并且管理组件对象的生命周期。组件享受到了容器化的管理,替程序员屏蔽了组件创建过程中的大量细节,极大的降低了使用门槛,大幅度提高了开发效率。
  • 组件化:Spring 实现了使用简单的组件组合成一个复杂的应用,在Spring 中可以使用XML和Java注解组合这些对象。这使得我么可以基于一个个功能明确、边界清晰的组件有条不絮的搭建超大型复杂应用系统。
  • 一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库。而且Spring旗下的项目已经覆盖了广泛的领域,很多方面的功能性需求可以在Spring Framework的基础上全部使用Spring来实现

4. 入门案例

4.1 环境要求

  • JDK:Java17+(Spring6要求JDK最低版本是Java17)
  • Maven:3.6+
  • Spring:6.1.5

4.2 搭建步骤

4.2.1 引入Spring相关依赖

java 复制代码
 <!-- spring context 依赖。当引入了spring context依赖后,表示spring的基础依赖引入了 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.1.5</version>
        </dependency>
        <!--junit  -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.2</version>
        </dependency>

4.2.2 创建类,定义属性和方法

java 复制代码
package org.example;

public class User {
    public User(){
        System.out.println("无参构造函数执行....");
    }

    public void add(){
        System.out.println("add a new user success!");
    }
}

4.2.3 按照spring要求创建配置文件(xml格式)

在resources目录下创建 bean.xml,名字自己定义。

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">

    <!-- 完成user对象的创建  bean标签
    id:唯一标识
    class:要创建对象所在路径的全路径(包名+类名)-->
    <bean id="user" class="org.example.User"/>

</beans>

4.2.4 进行最终测试

java 复制代码
import org.example.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestUser {
    @Test
    public void testUserObject(){
        //加载spring配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        //获取创建的对象
        User user = (User) context.getBean("user");
        System.out.println(user);
        //使用对象调用方法进行测试
        user.add();
    }


}

执行结果:

java 复制代码
无参构造函数执行....
org.example.User@314c508a
add a new user success!

进程已结束,退出代码为 0

5. 实现过程分析

5.1 创建对象过程中,无惨沟槽函数是否执行?

由4.2.4可知,无参构造函数执行

5.2 不用new方式,还可以如何创建对象?

反射

5.2.1 如何通过反射来创建对象

  1. 加载bean.xml配置文件
  2. 对bean.xml进行解析操作
  3. 获取xml文件bean标签属性值
  4. 用反射根据类全路径创建对象(反射就是等到类的字节码文件,通过字节码文件操作类中所有内容)
java 复制代码
    @Test
    public void testUserObject02() throws Exception  {
        //获取class 对象
        Class clazz = Class.forName("org.example.User");
        // 调用方法创建对象 (自java9已经弃用)
        //Object o = clazz.newInstance();
        User user = (User)clazz.getDeclaredConstructor().newInstance();
        System.out.println(user);
        user.add();
    }

5.3 创建的对象放到哪里?

相关推荐
考虑考虑12 小时前
Jpa使用union all
java·spring boot·后端
用户37215742613512 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊13 小时前
Java学习第22天 - 云原生与容器化
java
渣哥15 小时前
原来 Java 里线程安全集合有这么多种
java
间彧15 小时前
Spring Boot集成Spring Security完整指南
java
间彧16 小时前
Spring Secutiy基本原理及工作流程
java
Java水解17 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆19 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学19 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole19 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端