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 创建的对象放到哪里?

相关推荐
小池先生2 分钟前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
CodeClimb5 分钟前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
odng8 分钟前
IDEA自己常用的几个快捷方式(自己的习惯)
java·ide·intellij-idea
CT随16 分钟前
Redis内存碎片详解
java·开发语言
brrdg_sefg25 分钟前
gitlab代码推送
java
anlog25 分钟前
C#在自定义事件里传递数据
开发语言·c#·自定义事件
奶香臭豆腐38 分钟前
C++ —— 模板类具体化
开发语言·c++·学习
晚夜微雨问海棠呀1 小时前
长沙景区数据分析项目实现
开发语言·python·信息可视化
graceyun1 小时前
C语言初阶习题【9】数9的个数
c语言·开发语言
hanbarger1 小时前
mybatis框架——缓存,分页
java·spring·mybatis