Spring

26 篇文章 0 订阅

框架

框架就是一些类和接口的集合,通过这些类和接口协调来完成一系列的程序实现。JAVA框架可以分为三层:表示层,业务层和物理层。

  • 表示层(struts)
    Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求。
    在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发。
    (View:沿用JSP,HTTP,Form,Tag,Resourse ;Controller:ActionServlet,struts-config.xml,Action)

  • 业务层(spring)
    Spring是一个业务层框架,整合框架,很好的黏合表示层和持久层。

  • 持久层(mybatis)
    持久层框架,只负责关系型数据库操作,更注重sql语句的运用。

架构设计

​ 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行(推荐书籍:《淘宝技术这十年》)
在这里插入图片描述

  • 单一应用架构
    当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
  • 垂直应用架构
    当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
  • 分布式服务架构
    当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
  • 流动计算架构
    当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

Java主流框架演变之路

​ 1、JSP+Servlet+JavaBean
​ 2、MVC三层架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yc50ln1j-1597213126577)(F:\msb\java-master\javaframework\spring\image\mvc.png)]
​ 3、使用EJB进行应用的开发,但是EJB是重量级框架(在使用的时候,过多的接口和依赖,侵入性强),在使用上比较麻烦
​ 4、Struts1/Struts2+Hibernate+Spring
​ 5、SpringMVC+Mybatis+Spring
​ 6、SpringBoot开发,约定大于配置

核心解释

​ spring是一个开源框架。

​ spring是为了简化企业开发而生的,使得开发变得更加优雅和简洁。

​ spring是一个IOCAOP的容器框架。

​ IOC:控制反转

​ AOP:面向切面编程

​ 容器:包含并管理应用对象的生命周期,就好比用桶装水一样,spring就是桶,而对象就是水

使用spring的优点

​ 1、Spring通过DI、AOP和消除样板式代码来简化企业级Java开发
​ 2、Spring框架之外还存在一个构建在核心框架之上的庞大生态圈,它将Spring扩展到不同的领域,如Web服务、REST、移动开发以及NoSQL
​ 3、低侵入式设计,代码的污染极低
​ 4、独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺
​ 5、Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦
​ 6、Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式处理,从而提供了更好的复用
​ 7、Spring的ORM和DAO提供了与第三方持久层框架的的良好整合,并简化了底层的数据库访问
​ 8、Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部

如何简化开发

1.基于POJO的轻量级和最小侵入性编程
2.通过依赖注入和面向接口实现松耦合
3.基于切面和惯例进行声明式编程
4.通过切面和模板减少样板式代码

spring的模块划分图

在这里插入图片描述

  • 模块解释:
    Test:Spring的单元测试模块
    Core Container:核心容器模块
    AOP+Aspects:面向切面编程模块
    Instrumentation:提供了class instrumentation支持和类加载器的实现来在特定的应用服务器上使用,几乎不用
    Messaging:包括一系列的用来映射消息到方法的注解,几乎不用
    Data Access/Integration:数据的获取/整合模块,包括了JDBC,ORM,OXM,JMS和事务模块
    Web:提供面向web整合特性
  • 海燕解释:
    每一个绿框都是对应的一个模块,一共8个
    黑色框表示模块所需要依赖的jar包
    Test模块
    Core Container:说白了就是IOC容器,beans对象、core核心包、context上下文、spEL表达式语言,使用IOC只要导这四个包
    AOP:面向切面编程
    Aspects:切面
    Instrumentation:与jdk中的Instrumentation关联,一般不用
    Messaging:信息服务,一般不用
    Data Access/Integration:数据访问/继承,JDBC数据库连接,transactions事物,ORM,OXM一般不用,JMS一般不用
    Web:WebSocket网络通信协议,servlet,web,portlet和系统相关的一般不用

生态

任何一个语言或者任何一个框架想要立于不败之地,那么很重要的就是它的生态。

建立spring项目

1.建立java项目
2.导入jar包(spring所有版本https://repo.spring.io/release/org/springframework/spring/、dist:存放jar包、docs:存放文档、用maven可以用依赖,就可以不手动导入包了)
3.建立person类
4.建立spring配置文件ioc.xml(导入jar包后会有spring config),ioc.xml文件要放在resource资源目录下

<!--bean标签表示要创建的bean对象
    id:bean的唯一标识,为了跟其他的bean区分
    class:表示要创建的bean的完全限定名
-->
<bean id="person" class="com.petrel.bean.Person">
    <!--给属性赋值使用property标签
    name:表示属性的名称
    value:表示具体的属性值
    -->
    <property name="id" value="1"></property>//value表示一个具体的属性值
    <property name="name" value="zhangsan"></property>
    <property name="age" value="20"></property>
    <property name="gender" value="男"></property>
 </bean>

5.ApplicationContext具体实现子类

/*
        * ApplicationContext:表示IOC容器的入口,想要获取对象的话,必须要创建该类
        *   该类有两个读取配置文件的实现类
        *       ClassPathXmlApplicationContext:表示从classpath中读取数据
        *       FileSystemXmlApplicationContext:表示从当前文件系统读取数据
        *
        * * */
//容器中的对象在容器创建完成之前就已经把对象创建好了
ApplicationContext context = new ClassPathXmlApplicationContext("ioc.xml");
//获取具体的bean实例对象,需要进行强制类型转换
Person person = (Person) context.getBean("person");
//获取对象的时候不需要强制类型转换(已经自己转了)
//        Person person = context.getBean("person", Person.class);
System.out.println(person);

//没有自己new对象,spring容器创建的对象

搭建spring项目需要注意的点:

​ 1、一定要将配置文件添加到类路径中,使用idea创建项目的时候要放在resource目录下

​ 2、导包的时候别忘了commons-logging-1.2.jar包

细节点:

​ 1、ApplicationContext就是IOC容器的接口,可以通过此对象获取容器中创建的对象

​ 2、对象在Spring容器创建完成的时候就已经创建完成,不是需要用的时候才创建

​ 3、对象在IOC容器中存储的时候都是单例的,如果需要多例需要修改属性

Person person = context.getBean("person", Person.class);
Person person2 = context.getBean("person",Person.class);
System.out.println(person == person2);//运行结果:true

​ 4、创建对象给属性赋值的时候是通过setter方法实现的

​ 5、对象的属性是由setter/getter方法决定的,而不是定义的成员属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值