【Spring】开发框架Spring核心技术含Resource接口详细讲解
作者:mmseoamin日期:2023-12-19

【Spring】开发框架Spring核心技术含Resource接口详细讲解,在这里插入图片描述,第1张

前言

Spring 是 Java EE 编程领域的一款轻量级的开源框架,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,它的目标就是要简化 Java 企业级应用程序的开发难度和周期。

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


📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。

📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看

📘相关专栏C语言初阶、C语言进阶系列等,大家有兴趣的可以看一看

📙Python零基础入门系列,Java入门篇系列正在发展中,喜欢Python、Java的朋友们可以关注一下哦!

Spring核心技术

  • 1. Spring简介
  • 2. Spring体系结构
    • 2.1 核心模块(Core Container)
    • 2.2 AOP模块
    • 2.3 数据访问集成模块(Data Access/Integration )
    • 2.4 Web模块
    • 2.5 测试模块
    • 3. 初识Ioc与DI
      • 3.1 IoC控制反转和DI依赖注入
      • 3.2 常见的几种注入方法
      • 3.3 Spring的IoC例子
      • 3.4 Spring的DI例子
      • 4. Spring资源访问神器——Resource接口
        • 4.1 Resource接口的主要方法
        • 4.2 Resource接口的具体实现类
        • 4.3 Spring的资源加载机制
        • 5. 恒川赠书活动

          1. Spring简介

          Spring是一个分层的Java SE/EE应用一站式的轻量级开源框架。Spring核心是IOC和AOP。

          Spring主要优点包括:

          • 方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码造成的程序耦合度高。
          • AOP编程的支持,通过Spring提供的AOP功能,方便进行面向切面编程。
          • 声明式事务的支持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
          • 方便程序的测试,可以用非容器依赖的编程方式进行几乎所有的测试工作。
          • 方便集成各种优秀框架,Spring提供了对各种优秀框架的直接支持。

            2. Spring体系结构

            如下图所示,整个spring框架按其所属功能可以划分为五个主要模块,这五个模块几乎为企业应用提供了所需的一切,从持久层、业务层到表现层都拥有相应的支持,这就是为什么称Spring是一站式框架的原因。

            【Spring】开发框架Spring核心技术含Resource接口详细讲解,在这里插入图片描述,第2张

            2.1 核心模块(Core Container)

            Spring的核心模块实现了IoC的功能,它将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述。由IoC容器负责类的创建,管理,获取等。BeanFactory接口是Spring框架的核心接口,实现了容器很多核心的功能。

            Context模块构建于核心模块之上,扩展了BeanFactory的功能,包括国际化,资源加载,邮件服务,任务调度等多项功能。ApplicationContext是Context模块的核心接口。

            表达式语言(Expression Language)是统一表达式语言(EL)的一个扩展,支持设置和获取对象属性,调用对象方法,操作数组、集合等。使用它可以很方便的通过表达式和Spring IoC容器进行交互。

            2.2 AOP模块

            Spring AOP模块提供了满足AOP Alliance规范的实现,还整合了AspectJ这种AOP语言级的框架。通过AOP能降低耦合。

            2.3 数据访问集成模块(Data Access/Integration )

            该模块包括了JDBC、ORM、OXM、JMS和事务管理:

            1. 事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事务管理。
            2. JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。
            3. ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括hibernate、JPA、MyBatis等。而且可以使用Spring事务管理,无需额外控制事务。
            4. OXM模块:提供了一个对Object/XML映射实现,将Java对象映射成XML数据,或者将XML数据映射成java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。
            5. JMS模块:用于JMS(Java Messaging Service),提供一套“消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

            2.4 Web模块

            该模块建立在ApplicationContext模块之上,提供了Web应用的功能,如文件上传、FreeMarker等。Spring可以整合Struts2等MVC框架。此外,Spring自己提供了MVC框架Spring MVC。

            2.5 测试模块

            Spring可以用非容器依赖的编程方式进行几乎所有的测试工作,支持JUnit和TestNG等测试框架。

            3. 初识Ioc与DI

            【Spring】开发框架Spring核心技术含Resource接口详细讲解,在这里插入图片描述,第3张

            我们首先来讲解一下IoC的概念。IoC(控制反转:Inverse of Control)是Spring容器的核心,但是IoC这个概念却比较晦涩,让人不太容易望文生义。

            3.1 IoC控制反转和DI依赖注入

            传统程序设计中,我们需要使用某个对象的方法,需要先通过new创建一个该对象,我们这时是主动行为;而IoC是我们将创建对象的控制权交给IoC容器,这时是由容器帮忙创建及注入依赖对象,我们的程序被动的接受IoC容器创建的对象,控制权反转,所以叫控制反转。

            由于IoC确实不够开门见山,所以提出了DI(依赖注入:Dependency Injection)的概念,即让第三方来实现注入,以移除我们类与需要使用的类之间的依赖关系。总的来说,IoC是目的,DI是手段,创建对象的过程往往意味着依赖的注入。我们为了实现IoC,让生成对象的方式由传统方式(new)反转过来,需要创建相关对象时由IoC容器帮我们注入(DI)。

            简单的说,就是我们类里需要另一个类,只需要让Spring帮我们创建 ,这叫做控制反转;然后Spring帮我们将需要的对象设置到我们的类中,这叫做依赖注入。

            3.2 常见的几种注入方法

            使用有参构造方法注入

            public class  User{
                private String name;
                public User(String name){
                    this.name=name;
                }
            } 
                User user=new User("tom");
            

            使用属性注入

            public class  User{
                private String name;
                public void setName(String name){
                    this.name=name;
                }
            }
                 User user=new User();
                 user.setName("jack");
            

            使用接口注入

            // 将调用类所有依赖注入的方法抽取到接口中,调用类通过实现该接口提供相应的注入方法。 
            public interface Dao{
                public void delete(String name);
            } 
            public class DapIml implements Dao{
                private String name;
                public void delete(String name){
                    this.name=name;
                }
            }
            

            通过容器完成依赖关系的注入

            上面的注入方式都需要我们手动的进行注入,如果有一个第三方容器能帮助我们完成类的实例化,以及依赖关系的装配,那么我们只需要专注于业务逻辑的开发即可。Spring就是这样的容器,它通过配置文件或注解描述类和类之间的依赖关系,自动完成类的初始化和依赖注入的工作。

            3.3 Spring的IoC例子

            (1) 创建工程,导入jar包

            这里我们只是做IoC的操作,所以只需要导入核心模块里的jar包,beans、core、context、expression等。因为spring中并没有日志相关的jar包,所以我们还需要导入log4j和commons-logging。

            (2) 创建一个类

            public class User {
                public void add(){
                    System.out.println("add.....");
                }
            }
            

            (3) 创建一个xml配置文件

            
             
                //配置要创建的类  
                        
            
            

            (4) 进行测试

            //这只是用来测试的代码,后期不会这么写
            public class Test {
                @org.junit.Test
                public void test(){
                    //加载配置文件
                    ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
                    //获取对象
                    User user=(User) context.getBean("user");
                    System.out.println(user);
                    //调用方法
                    user.add();
                }
            }
            

            在容器启动时,Spring会根据配置文件的描述信息,自动实例化Bean并完成依赖关系的装配,从容器中即可获得Bean实例,就可以直接使用。Spring为什么仅凭一个简单的配置文件,就能神奇的实例化并配置好程序使用的Bean呢?答案是通过 Java的反射技术。

            3.4 Spring的DI例子

            我们的service层总是用到dao层,以前我们总是在Service层new出dao对象,现在我们使用依赖注入的方式向Service层注入dao层。

            // UserDao
            public class UserDao {
                public void add(){
                    System.out.println("dao.....");
                }
            }
            // UserService
            public class UserService {
                UserDao userdao;
                public void setUserdao(UserDao userdao){
                    this.userdao=userdao;
                }
                public void add(){
                    System.out.println("service.......");
                    userdao.add();
                }
            }
            ----------------------------------------------------
            // 配置文件
             
            //这样在实例化service的时候,同时装配了dao对象,实现了依赖注入
            
                //ref为dao的id值
                
            
            

            4. Spring资源访问神器——Resource接口

            JDK提供的访问资源的类(如java.NET.URL,File)等并不能很好很方便的满足各种底层资源的访问需求。Spring设计了一个Resource接口,为应用提供了更强的访问底层资源的能力,该接口拥有对应不同资源类型的实现类。

            4.1 Resource接口的主要方法

            • boolean exists():资源是否存在
            • boolean isOpen():资源是否打开
            • URL getURL():返回对应资源的URL
            • File getFile():返回对应的文件对象
            • InputStream getInputStream():返回对应资源的输入流

              Resource在Spring框架中起着不可或缺的作用,Spring框架使用Resource装载各种资源,包括配置文件资源,国际化属性资源等。

              4.2 Resource接口的具体实现类

              • ByteArrayResource:二进制数组表示的资源
              • ClassPathResource:类路径下的资源 ,资源以相对于类路径的方式表示
              • FileSystemResource:文件系统资源,资源以文件系统路径方式表示,如d:/a/b.txt
              • InputStreamResource:对应一个InputStream的资源
              • ServletContextResource:为访问容器上下文中的资源而设计的类。负责以相对于web应用根目录的路径加载资源
              • UrlResource:封装了java.net.URL。用户能够访问任何可以通过URL表示的资源,如Http资源,Ftp资源等

                4.3 Spring的资源加载机制

                为了访问不同类型的资源,必须使用相应的Resource实现类,这是比较麻烦的。Spring提供了一个强大的加载资源的机制,仅通过资源地址的特殊标识就可以加载相应的资源。

                Spring定义了一套资源加载的接口。ResourceLoader接口仅有一个getResource(String location)的方法,可以根据资源地址加载文件资源。资源地址仅支持带资源类型前缀的地址,不支持Ant风格的资源路径表达式。ResourcePatternResolver扩展ResourceLoader接口,定义新的接口方法getResources(String locationPattern),该方法支持带资源类型前缀以及Ant风格的资源路径的表达式。PathMatchingResourcePatternResolver是Spring提供的标准实现类。

                5. 恒川赠书活动

                恒川赠书活动第四期:

                【Spring】开发框架Spring核心技术含Resource接口详细讲解,在这里插入图片描述,第4张

                618,清华社 IT BOOK 多得图书活动开始啦!活动时间为2023年6月7日至6月18日,清华社为您精选多款高分好书,涵盖了C++、Java、Python、前端、后端、数据库、算法与机器学习等多个IT开发领域,适合不同层次的读者。全场5折,扫码领券更有优惠哦!

                特惠购书查看详细

                抽奖活动:

                1. 《 Spring Cloud微服务快速上手 》

                  【Spring】开发框架Spring核心技术含Resource接口详细讲解,在这里插入图片描述,第5张

                2. 《 项目驱动零起点学Java 》

                  【Spring】开发框架Spring核心技术含Resource接口详细讲解,在这里插入图片描述,第6张

                3. 《 Python从入门到精通(微课精编版)》

                  【Spring】开发框架Spring核心技术含Resource接口详细讲解,在这里插入图片描述,第7张

                本次活动一共赠书3本,评论区抽取3位小伙伴免费送出!!

                参与方式:关注博主、点赞、收藏、评论区评论 “ 人生苦短,我爱Python!”(切记要点赞+收藏,否则抽奖无效,每个人最多评论三次!!!)

                活动截止时间:2023-06-16 21:00:00

                通知方式:私信通知 (五十多本书里面选一本)


                如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下,谢谢大家!!!

                制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。