且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

01_spring_ 简介| 学习笔记

更新时间:2022-08-31 21:01:20

开发者学堂课程【Java Web 开发系列课程:Spring 框架入门01_spring_ 简介】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/538/detail/7333


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 的实现发生改变,应用程序本身不用改变