JavaEE-day20--Spring核心概念

1. SSM简介

SSM框架,是Spring + Spring MVC + MyBatis的缩写,Spring依赖注入DI来管理各层的组件,使用面向切面编程AOP管理事物、日志、权限等。SpringMVC代表了Model(模型)View(视图)Controller(控制)接收外部请求,进行分发和处理。Mybatis是基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来。
优点:

  1. MyBatis好处:同意提取sql、对相关系映射.
  2. SpringMVC:简化servlet、简化视图映射.
  3. Spring:团队的沟通桥梁、协作者.

2. MVC设计概述

出现的原因:

  • JSP 和 Java Bean 之间严重耦合,Java 代码和 HTML 代码也耦合在了一起
  • 要求开发者不仅要掌握 Java ,还要有高超的前端水平
  • 前端和后端相互依赖,前端需要等待后端完成,后端也依赖前端完成,才能进行有效的测试
  • 代码难以复用

正因为上面的种种弊端,所以很快这种方式就被 Servlet + JSP + Java Bean 所替代了,早期的 MVC 模型(Model2)就像下图这样:
在这里插入图片描述
首先用户的请求会到达 Servlet,然后根据请求调用相应的 Java Bean,并把所有的显示结果交给 JSP 去完成,这样的模式我们就称为 MVC 模式。

M 代表 模型(Model)
模型是什么呢? 模型就是数据,就是 dao,bean
V 代表 视图(View)
视图是什么呢? 就是网页, JSP,用来展示模型中的数据
C 代表 控制器(controller)
控制器是什么? 控制器的作用就是把不同的数据(Model),显示在不同的视图(View)上,Servlet 扮演的就是这样的角色。

3. SpringMVC 的架构

为解决持久层中一直未处理好的数据库事务的编程,又为了迎合 NoSQL 的强势崛起,Spring MVC 给出了方案:
在这里插入图片描述
MVC原理图:
在这里插入图片描述

4. Spring 简述

  • Spring是一个当前Java EE轻量级框架,目的是使现有技术更加易用。Spring的诞生是为了满足企业级系统的一些需求,那么,Spring究竟带来了那些好处呢?
  • 引入Spring之后,Spring的依赖注入可以统一管理和生成javabean,哪有需要调用就往哪注入,这种方式大大降低了开发难度,降低了代码的耦合度,给后期的维护也带来了方便。
  • 同时spring的AOP还能将系统中那些类似于日志管理,事务等分布性比较强,但又必须有的代码集中生成,无需开发人员关注,提高工作效率。
  • Spring 的两大核心:依赖注入(简化java类)、AOP(统一提取公用代码)。
  • Spring的主要内容:
    IoC容器
    AOP实现
    数据访问支持:简化JDBC/ORM框架(Hibernate、Mybatis)、声明式事务。
    Web集成

5. Spring 的体系结构

在这里插入图片描述
spring框架的核心组件只有三个:Core、Context、Beans
比较重要的包:
AOP包(主要提供面向切面编程的实现)
Web(主要提供了Web应用开发的支持及针对Web应用的MVC思想实现) 、ORM(为Hibernate、Mybatis这类持久化框架提供支持)
还有Spring MVC(这个是它自带的一个web视图层,可以替代到Sturts2)

6. Spring的核心技术

Spring 两大核心技术:

  • 控制反转(IoC:Inversion of Control ),也叫依赖注入(DI:Dependency Injection )。
  • 面向切面编程(AOP:Aspect Oriented Programming)。

Spring解决了一个非常关键的问题,他可以让你把对象之间的关系转而使用配置文件来管理,也就是他的依赖注入机制,而这个注入关系在一个叫 Ioc 的容器中管理。Spring正是通过把对象包装在Bean中从而达到对这些对象管理以及一系列额外操作的目的。

Spring是怎么管理这些Bean的呢?

Spring把所有的Bean及它们之间的依赖关系以配置文件的方式组装起来,在一个叫IoC(Inversion of Control)的容器中进行管理,这也就是Spring的核心设计思想之一依赖注入机制,Spring的另一个核心设计思想叫做AOP

一个Context基本上把spring具有的核心功能都包裹起来了,那么这就是spring框架运行需要的环境,也就是常说的上下文。任何一个框架运行都通过一个类来进行描述它执行时的环境,ServletContext也是一样,就是Servlet环境信息。

优点:
在这里插入图片描述

7. 控制反转(依赖注入)

概念:
将组件对象的控制权从代码本身转移到外部容器。

  • 组件化的思想:分离关注点,使用接口,不再关注实现。
    目的:解耦合,实现每个组件时只关注组件内部的事情
  • 依赖注入:将组建的构建和使用分开

详细解析:

  • 当某个角色(比如一个java实例,调用者)需要另一个角色(另一个java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但是在spring里,创建被调用者的工作不再由调用者来完成。因此被称为控制反转;创建被调用者实例的工作通常由spring容器来完成,然后注入调用者,因此也称为依赖注入。这样给程序带来很大的灵活性,这样也实现了我们的接口和实现的分离。
  • 简而言之也就是说我们要获得一个对象,不由我们开发者自己创建,而是由我们的容器来注入给我们的程序来使用。

实例:使用 Spring 实现”控制反转“

  1. 新建Java项目,目录结构如下:
    在这里插入图片描述

  2. Spring配置文件applicationContext.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-3.2.xsd">
     	< !-- 通过bean元素声明需要Spring创建的实例。该实例的类型通过class属性指定,并通过id属性为该实例指定一个名称,以便在程序中使用 -->
     	< bean id="helloSpring" class="cn.springdemo.HelloSpring">
     	< !-- property元素用来为实例的属性赋值,此处实际是调用setWho()方法实现赋值操作-->
     		< property name="who">
     			< !-- 此处将字符串"Spring"赋值给who属性 -->
     			< value>Spring</value>
     		< /property>
     	< /bean>
     < /beans>
    
  3. 类HelloSpring.java代码如下:

     package cn.springdemo;
     /**
      * 第一个Spring,输出"Hello,Spring!"。
      */
     public class HelloSpring {
     	// 定义who属性,该属性的值将通过Spring框架进行设置
     	private String who = null;
     	/**
     	 * 定义打印方法,输出一句完整的问候。
     	 */
     	public void print() {
     		System.out.println("Hello," + this.getWho() + "!");
     	}
     	public String getWho() {
     		return who;
     	}
     	public void setWho(String who) {
     		this.who = who;
     	}
     }
    
  4. 测试类HelloSpringTest.java代码如下:

     package test;
     
     import org.junit.Test;
     import org.springframework.context.ApplicationContext;
     import org.springframework.context.support.ClassPathXmlApplicationContext;
     
     import cn.springdemo.HelloSpring;
     
     public class HelloSpringTest {
         @Test
         public void helloSpring() {
             // 通过ClassPathXmlApplicationContext实例化Spring的上下文
             ApplicationContext context = new ClassPathXmlApplicationContext(
                     "applicationContext.xml");
             // 通过ApplicationContext的getBean()方法,根据id来获取bean的实例
             HelloSpring helloSpring = (HelloSpring) context.getBean("helloSpring");
             // 执行print()方法
             helloSpring.print();
         }
     }
    
  5. 输出结果:Hello,Spring!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值