首页 > 其他分享 >Spring基础知识学习总结(一)

Spring基础知识学习总结(一)

时间:2024-08-05 18:58:17浏览次数:15  
标签:总结 容器 Java 配置文件 对象 Spring 基础知识 IOC

一. 基础介绍

Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。

Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发

Spring可以做很多事情,它为企业级开发提供了丰富的功能,但是这些功能的底层都依赖于它的两个核心特性,也就是依赖注入(dependency injection,DI)面向切面编程(aspect-oriented programming,AOP)

框架的核心:IoC容器和AOP模块

(1)IOC:控制反转,把创建对象的过程交给Spring来管理
(2)Aop:面向切面,不修改源代码进行功能增强

Spring的优缺点

优点

  • 方便解耦,简化开发

    Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护,交给Spring管理。

  • AOP编程的支持

    Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。

  • 声明式事务的支持

    只需要通过配置就可以完成对事务的管理,而无需手动编程。

  • 方便程序的测试

    Spring对Junit4支持,可以通过注解方便的测试Spring程序。

  • 方便集成各种优秀框架

    Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持(如:Struts、Hibernate、MyBatis等)。

  • 降低JavaEE API的使用难度

    Spring对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

缺点

  • Spring明明一个很轻量级的框架,却给人感觉大而全
  • Spring依赖反射,反射影响性能
  • 使用门槛升高,入门Spring需要较长时间

二. IOC(控制反转)

理解:在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。这样对象的控制权就反转了,程序员无需关心对象的各种创建。只需关注业务的本身,大大降低了程序的耦合性

有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从IOC容器中取出需要的对象进行依赖注入

控制反转IOC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IOC的一种方法

1. 搭建 Spring IOC环境 

创建 maven 版的 Java 工程

 2. 在pom.xml中加入相关依赖,导入Spring相关jar包

具体可以了解maven其依赖自动导入

3. 创建 Spring 配置文件

<?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">
</beans>

Spring框架的配置文件是基于xml的,Spring强大的功能依赖于类型繁多的配置项

起名为applicationContext.xml

4. 创建实体类

创建一个简单的HelloWorld类

public class Helloworld {
    private String name;
    public Helloworld(){
        System.out.println("创建对象");
    }
    public void setName(String name) {
        System.out.println("调用方法");
        this.name = name;
    }
    public void sayHello(){
        System.out.println("Hello!" + name);
    }
}

5. 在applicationContext.xml文件中对类进行配置 

<!--配置bean
        id属性:给当前bean起一个名称,该名称必须保证是唯一的
        class属性:设置bean的全类名-->
    <bean id="helloworld" class="com.LSTAR.Helloworld">
        <!--给属性赋值
            name属性:设置bean属性名
            value属性:设置bean属性值-->
        <property name="name" value="LSTAR"></property>
    </bean>

 注意,bean标签必须放在beans标签里边

6. 测试类(记得导入测试的jar包---junit依赖)

public class test {
@Test
    public void test(){
        //1.创建IOC容器对象
        ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.从IOC容器中获取Helloworld对象
        Helloworld hello = (Helloworld) ioc.getBean("helloworld");
        //3.调用类中方法
        hello.sayHello();
    }
}

该测试是通过ApplicationContext:BeanFactory的子接口,加载配置文件的时候创建对象,再调用类中方法

三.Spring的两种IOC实现方式:


(1)BeanFactory:IOC容器基本实现,加载配置文件时不会创建对象,在获取对象时才创建对象。

(2)ApplicationContext:BeanFactory的子接口,加载配置文件的时候就会创建对象 

 

标签:总结,容器,Java,配置文件,对象,Spring,基础知识,IOC
From: https://blog.csdn.net/qq_73340809/article/details/140933982

相关文章

  • Springboot图片上传压缩
    原文链接:https://blog.csdn.net/hanerer1314/article/details/96175436需求背景说明最近后端管理项目中需要用到用户一些证件图片进行表单文件的上传如果每个人的证件照片都非常大,对服务器资源将是一种浪费,因为用户量也不是很大,所以也没对接第三方的OSS或者七牛云存储对象,就写......
  • 【待做】【域渗透】获取域控方法总结
    搭建虚拟环境【域控】,192.168.10.3【域成员】,192.168.10.4工具mimikatzprocdump64在域渗透中、作为渗透测试人员,获取域控的权限基本上可以获取整个内网的权限。在大多数情况下,攻击者可以通过定位域管理员所登录的服务器,利用漏洞获取服务器system权限,找到域管理的账号、......
  • Spring Cloud微服务项目集成MyBatis
            在现代软件开发中,微服务架构已经成为一种流行的解决方案,它能够将应用程序拆分成多个小的、独立的服务。每个服务负责一个特定的业务功能,并可以独立部署和扩展。SpringCloud是一个提供各种工具和框架以支持微服务开发的开源框架,而MyBatis是一个流行的持久层......
  • 计算机毕业设计必看必学!! 85583 springboot高校网上选课系统,原创定制程序, java、PHP
                                                  摘要本论文主要论述了如何使用JAVA语言开发一个高校网上选课系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,......
  • 基于Docker Swarm、Portainer和Jenkins的Spring Cloud服务自动构建和部署
    本文探讨基于DockerSwarm、Portainer和Jenkins的SpringCloud微服务自动构建和部署。相对本文讨论的方案,业界更主流的是基于k8s,显而易见k8s的功能更强大,但也更复杂,也需要投入更多开发和运维成本。对于小公司,集群规模不会很大,DockerSwarm加上Portainer可以满足大部分需求,建议可以......
  • 线程相关个人笔记总结
    什么是线程和进程进程是一个程序的实例,线程是进程中的实体,一个进程有多个线程线程的创建方式1.继承Thread类重写run() 创建一个类继承自Thread类,并重写run()方法来定义线程执行的任务。通过创建该类的实例并调用start()方法来启动线程。classMyThreadextends......
  • 《数据结构习题解析与实验指导_李冬梅,张琪编著》总结出的大纲
        下面大纲为《数据结构习题解析与实验指导_李冬梅,张琪编著》总结出的大纲,可装13学习下:          ......
  • SpringBoot-事件监听机制
    SpringBoot-事件监听机制  本文参考的SpringBoot版本是2.6.13  一、SpringBoot启动事件顺序 事件执行顺序: 1. ApplicationStartingEvent   springboot最开始启动时触发,SpringApplication.run()之前发送。 2.ApplicationEnvironm......
  • 8.5模考总结
    省流:坠机了,但没完全坠。\(T1\)水,直接枚举比较即可,赛事\(15min\)\(AC\),实际\(5min\),\(10min\)再打缺省源,最终得分\(100pts\)。\(T2\)模拟每一个括号,维护一个深度,当深度大于\(L\)或小于\(0\)时,累计答案即可,赛事\(50min\)\(AC\),最终得分\(100pts\)。\(T3\)一个......
  • tomcat10 springboot项目部署成功但springboot没有启动日志问题
    问题描述项目在tomcat8可以启动成功,请求也可以正常处理,在tomcat10上只有部署成功信息比如:deployWARDeploymentofwebapplicationarchive[/data1/WWW/webapps/XXX.war]hasfinishedin[127]ms,但是没有springboot启动的信息。该问题不属于springboot打包为war包不成......