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

相关推荐
真实的菜5 分钟前
消息队列处理模式:流式与批处理的艺术
java
Bruce_Liuxiaowei6 分钟前
PHP文件包含漏洞详解:原理、利用与防御
开发语言·网络安全·php·文件包含
泽020215 分钟前
C++之STL--list
开发语言·c++·list
YGGP19 分钟前
吃透 Golang 基础:数据结构之 Map
开发语言·数据结构·golang
盖世英雄酱5813620 分钟前
Java 内存管理技巧(新手必看集合篇)
java
~plus~21 分钟前
Harmony核心:动态方法修补与.NET游戏Mod开发
开发语言·jvm·经验分享·后端·程序人生·c#
码农小灰22 分钟前
Java 8 Stream API 入门到实践详解
java·java案例
步、步、为营27 分钟前
.NET 事件模式举例介绍
java·开发语言·.net
cui_hao_nan30 分钟前
设计模式——模板方法
java·设计模式
~plus~30 分钟前
WPF八大法则:告别模态窗口卡顿
开发语言·经验分享·后端·程序人生·c#