阿里云
为了无法计算的价值
打开APP
阿里云APP内打开
学习中心> Java Web开发系列课程 - Spring框架入门> 正文

Java Web开发系列课程 - Spring框架入门

25课时 |
29583人已学 |
免费
课程介绍

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架,是为了解决软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

相关的阿里云产品:企业级分布式应用服务 EDAS

企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Spring Cloud、Apache Dubbo(以下简称 Dubbo )等微服务运行环境,助力您的各类应用轻松上云。了解产品详情: https://www.aliyun.com/product/edas 

01_spring_简介

 

内容介绍:

一、spring 介绍

二、spring 理念

三、spring 优点

四、主要内容

五、ioc——inversion of control 控制反转

 

一、spring 介绍

spring:春天;——给软件行业带来了春天。作者 Rod Jonhson。

Spring 代码很简单,重要在思想上。难在把框架和项目结合,难在项目的复杂程度。学习 spring 之后,还要把它结合到项目里去。

 

二、spring 理念

理念:是现有技术更加实用。

作者认为现有的框架已经够多了,没有必要再去创建新的框架、新的技术,把现有的框架和技术合理的运用和整合,让现有的技术运作的更好。不同的框架作用不一样,需求不一样,运用的项目的侧重点不一样。作者整合了其他框架,起到了一个粘合剂的作用,将 spring 发展完善。目前 spring 有着非常多的技术,具体可以进入 spring 官网查看。在官网里可以看到有很多组件。在 project 里面可以看见很多项目。

比如 SPING IO PLATFORM、SPRING BOOT、SPRING FRAMEWORK、SPRING XD、SPRING CLOUD、SPRING DATA、SPRING ENTEGRATION、SPRING BATCH、SPRING SECURITYD 等等等等一系列项目。

现在我们学习的是 spring framework,本身是大杂烩整合现有的框架技术。

 

三、Spring 优点

轻量级框架(框架不具有倾入性,倾入性就是在接触某个框架时不去实现它的接口。)轻量级框架的好处是替换它的时候,原有的代码依然可以使用,不需要改变。

提供 Ioc 容器——控制反转(Spring 的核心内容)

Aop 面向切面编程

对事务的支持:本身就支持 JDBC 等简单的事务,它还支持一些第三方的事务。

对框架的支持——Spring 本身最原始的技术就是把所有的框架整合在一起。

还有其他一些优点,在文件里面可以进行查看。

 

四、主要内容 

首先 Spring 支持 junit 单元测试,也就是说使用 Spring 的时候不用启动服务器之类的东西。

第二是核心容器(Core Container),也是所学重点,包括核心(Core),Core 是一切的基础,包括 Beans 工厂用来创建对象的,还有上下文 Context,SpEL 是 Spring 的表达式,目前不讲。

重点是 AOP 和 Aspects。

再往上是 Spring 对 Data Access 数据访问的支持,支持 JDBC、ORM、OXM、JMS 邮件服务、Transactions 事务。还有对 Web 的支持,包括 WebSocker、Serviet、Web、Portlet,放在 MVC 里面去讲。

 

五、ioc——inversion of control 控制反转

打开 Java 软件,新建 Java Project,Project nam e 为 01spring4_ioc1。

点击 Finish 后点确定。之后打开 src,Java Package内Name为cn.sxt.dao。

点击 Finish。 Java Interface 里修改 Name 为 UserDao。

点击 Finish,然后进行代码编写。具体代码如下:

package cn.sxt.dao:

public interface UserDao{

public void getUser();

}

接口需要类,先建一个类包,方便扩展,解决耦合性。

package cn.sxt.dao. impl;

import cn. sxt . dao. UserDao;

public class UserDaoImpl implements UserDao {

@Override

public void getUser ( ) {

System. out . print1n("获取用户数据") ;

}

}

再创建一个 cn.sxt.service:

package cn. sxt. service ;

public interface UserService {

public void getUser ( )

}

Service 里的实现是根据 dao。

package cn. sxt.service. impl;

import cn. sxt. dao.UserDao;

import cn. sxt .dao . impl . UserDaoImpl;

import cn. sxt. service.UserService;

public class UserServiceImpl implements UserService {

private UserDao userDao = new UserDaoImpl ( );

@Override

public void getUser ( ) {

userDao. getUser ( );

}

}

不同的 dao 实现不同。一旦改变了 dao,service 里面的 dao 调用也要改变,对象是自己创建的,当改变对象时原码也要重新去写。为了不去改变原码,可以通过以下方法:

public class Test {

public static void main(String[] args) {

UserServiceImpl userService = new UserServiceImpl ( );

userService. setUserDao( new UserDaoMySqlImpl ( ) );

userService. getUser ( ) ;

System. out. println(“--------------“);

userService . setUserDao(new UserDao0racleImpl ( ) );

userService. getUser ( );

}

}

以上是让程序自己去 new 一个对象的方法,除此之外还有把他放进配置文件,然后调用配置文件的方法,此时程序不用管代码,只提供一个接口。程序员不再关注对象本身的具体实现,更多的去关注业务。现在和 dao 的实现无关,直接依赖于对象的创建。

public class UserServiceImpl implements UserService{

private UserDao userDao=null ;

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

通过案例:

对象由原来程序本身创建,变为了程序接收对象。

程序员主要精力集中于业务实现。

实现了 service 和 dao 的解耦工作。Service 层和 dao 层实现了分离。没有直接依赖关系。

如果 dao 的实现发生改变,应用程序本身不用改变。

我的学习进度
请登录后查看您的学习进度!
立即登录
本课程相关云产品