Spring?Spring?Spring到底是啥?

前言

不是开发出身,现在的事情也杂,做过个项目对Spring就是照着用,没有系统了解过。
最近在看框架方面的内容,就顺便看看了Spring。
看了一天,对Spring是什么?IoC、依赖注入基本搞明白了。AOP应用场景懂了,原理没懂。
硬着头皮总结下吧,才对得起这一天的查阅。

1、产生的背景

2003年,一位大神不满EJB开发的臃肿,认为经过设计,利用javaBean的方式也一样达到企业开发的效果。于是编写了个开源的框架。其中的一个模块SpringMVC更完美的实现了web开发中的3层架构,影响深远。
现在2020年,17年前思想仍然影响着现在搬砖的小弟,大师真是革命性的人物。同时,Spring也不停在进化着,如SpringBoot,SpringCloud等。

2、好处

理解真真的不深刻,照搬。

  1. 低侵入式设计,代码污染极低
  2. 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺
  3. Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦
  4. Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用
  5. Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问
  6. Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部

3、spring构成

在这里插入图片描述

核心容器

核心容器由spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring表达式语言,Spring Expression Language)等模块组成,它们的细节如下:

spring-core模块提供了框架的基本组成部分,包括 IoC 和依赖注入功能。

spring-beans 模块提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。

context模块建立在由core和 beans 模块的基础上建立起来的,它以一种类似于JNDI注册的方式访问对象。Context模块继承自Bean模块,并且添加了国际化(比如,使用资源束)、事件传播、资源加载和透明地创建上下文(比如,通过Servelet容器)等功能。Context模块也支持Java EE的功能,比如EJB、JMX和远程调用等。ApplicationContext接口是Context模块的焦点。spring-context-support提供了对第三方库集成到Spring上下文的支持,比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
spring-expression模块提供了强大的表达式语言,用于在运行时查询和操作对象图。它是JSP2.1规范中定义的统一表达式语言的扩展,支持set和get属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从Spring IoC容器检索对象,还支持列表的投影、选择以及聚合等。

数据访问/集成

数据访问/集成层包括 JDBC,ORM,OXM,JMS 和事务处理模块

Web

Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成

4、spring使用

4.1用idea创建spring项目

  1. idea创建maven项目
  2. 使用archetype,选择【】
  3. 在pom文件,添加依赖了的spring包
 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>
  </dependencies>
  1. 自动重新import
  2. 添加ApplicationContext.xml文件,注意要设定资源根目录
 <bean id="student" class="master.com.Student" scope="prototype">
        <property name="name"><value>setter学生的名字</value></property>
        <property name="age"><value>20</value></property>
        <property name="mainTeacher"><ref bean="teacher"></ref></property>
    </bean>

    <bean id="teacher" class="master.com.Teacher" scope="prototype">
        <property name="name"><value>setter老师的名字</value></property>
        <property name="education"><value>IT</value></property>
    </bean>
  1. 会自带helloword,试运行
 //以前的写法
        helloWorld hw=new helloWorld();
        hw.setName("常规方法");
        System.out.println(hw);
        System.out.println("======================");


        //spring
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("ApplicationContext.xml");
        helloWorld a=(helloWorld)applicationContext.getBean("a");
        System.out.println(a);
        System.out.println("======================");

可参考:https://blog.csdn.net/weixin_43373239/article/details/89578536

4.2 结合原来项目的理解

现在才明白了ApplicationContext的作用
还有配在里边的bean
当时真是懵懂照着配
总的来说,对Spring这个名词没有因未知而恐惧了,准备继续用1周的时间再多了解些。路漫漫兮,都得懂点啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章