Spring作为企业Java最流行的应用程序开发框架,已经被数以百万计的世界各地的开发人员使用,Spring框架用来创建高性能,易于测试的,可重用的代码。是一个开源的Java平台,它最初是由Rod Johnson编写并在2003年6月在Apache2.0许可下首次发布。由于是轻量级的,当涉及到大小和透明度。spring框架的基本版本是大约2MB。核心功能可以在任何Java应用程序中使用,但也有扩展的Java EE平台上构建Web应用程序。Spring框架的目标,以使J2EE开发更容易使用,并且通过使基于POJO的编程模型,促进良好的编程习惯。本文将带你了解Spring框架的基本使用,方便在工作中更好的了解其原理。

1:Spring在开发中的作用是什么? 

Spring的主要作用是整合第三方的框架、为Service层提供事务

2:传统的MVC的开发模式

M:Model  (pojo+Service+DAO)

V:View    (jsp、HTML)

C:Controll  (Servlet、SpringMVC、struts)

在传统的开发中:我们在Servlet中需要调用Service、在Service中需要调用DAO

我们可以间接性的认为  Servlet---->Service----->DAO

在我们的开发中Service的创建、DAO的创建、是由程序员直接或者间接性的完成了对象的创建工作

我们的对象创建是由程序员去完成的?依赖关系是由程序员去管理的?

我们的对象的创建能不能交给第三方去完成呢?我们的依赖关系能不能由第三方去进行维护呢?

Spring的出现正好解决了这个问题.......

3:Spring是什么?

Spring就是有关管理对象的创建以及管理对象之间的依赖关系的这样一门技术

也就是说使用了Spring之后 我们的对象的创建可以由Spring来完成、对象之间的依赖关系也可以由Spring来进行维护

4:Spring能干什么?

4.1:Spring管理对象之间的依赖关系

4.2:为Service层提供事务

4.3:整合第三方框架

4.4:提供了DAO层的解决方案

4.5:提供了控制器的解决方案

4.6:提供了对Web的支持

4.7:提供了对上下文的支持

5:Spring的家族产品有哪些

Spring     SpringMVC    Spring Security   Spring data   Spring Boot    Spring Cloud

6:Spring中的七大模块

Spring Core:这个模块是Spring的核心模块  主要功能就是IOC/DI  提供的就是Spring的核心容器 IOC

Spring AOP:这个模块的主要功能是提供了面向切面编程

Spring ORM:这个包的主要功能是 提供了 整合第三方ORM框架的包

Spring Web:这个包的主要功能就是 提供了对Web的支持

Spring WebMVC:SpringMVC  (SpringMVC不是一个框架是Spring中的一个模块而已)

SpringDAO:这个模块的主要功能就是 提供了对数据库的访问

Spring Context:认证、邮件、EJB、UI

7:Spring的第一个HelloWorld程序

7.1:导包

主要导入的是Spring的核心功能包 Spring Core

7.2:编写实体类

7.3:编写配置文件

7.4:测试

8:Spring中的IOC的使用(配置文件)

8.1:无参数的对象的创建的配置文件的编写

 8.2:有参数的对象的创建

  8.3:配置文件的玩法

8.4:工厂类的创建

8.5:工厂中非静态的方法创建JAVA对象

8.6:工厂中静态方法创建JAVA对象

总结下:IOC

IOC:控制反转

   谁控制了谁? 

Spring的IOC容器控制了对象的创建

    什么东西反转了?

以前我们需要自己创建JAVA对象  现在 创建对象的这个权利反转了、创建对象的这个权利交给了Spring去完成

9:Spring中的DI

DI:依赖注入

   谁依赖于谁?

Controll依赖于Service   Service依赖于DAO

   注入了什么东西?

1:注入具体的对象     2:注入了实际的值

9.1:set注入(可能是以前用的最多的一种方式)

9.1.1:在需要注入对象的类里面添加set方法

9.1.2:编写配置文件

9.2:P标签注入

前提:在约束中必须有:xmlns:p="http://www.springframework.org/schema/p"

9.2.1:必须在需要注入对象的地方编写set方法

9.2.2:在配置文件中进行注入

9.3:内部bean进行注入

9.3.1:在类中申明set方法

9.3.2:编写配置文件

9.4:自动装配

9.4.1:全局实现自动装配

9.4.2:局部实现自动装配

注意:如果是通过类型来实现自动装配的话那么注入的对象在IOC的容器中,必须只有一个实例、如果有多个实例的话那么就造成了 不知道注入那个对象了(报错)、通过名字进行装配的时候 那么只要对象的名字一致那么就不会报错了、不管是哪种注入方式那么set方法都是必须要写的

10:获取对象的三种形式

10.1:通过类型来获取

10.2:通过名字来获取

10.3:通过id来获取

11:通过注解的形式来玩下IOC和DI

要记住如下的注解

@Component:这个表示的是将当前的类的实例化对象放到IOC容器里面

@Service :语义化的Component一般用于Service上面 意义跟上面是一样的

@Repository:语义化的Component一般用于DAO上面  意义跟上面一样

@Scope:这个用来设置当前的这个类是单例的还是多例的

@PostConstruct:这个表示的意思是:当前类对象放到IOC容器的时候执行的初始化方法

@PreDestroy:这个表示的是对象在IOC容器中销毁的时候要执行的方法(资源回收)

@Autowired:这个表示的是根据类型(type)实现自动注入

@Resource:这个表示的是通过名字进行注入

注意:在类上面使用 @Component、@Service、@Repository的时候 默认的对象的名字就是当前的类的名字的首字母小写

@Component、@Service、@Repository三个注解的意义是一样的、在实际开发中 Service层一般使用@Service、DAO层一般使用@Repository、如果其他的对象我们需要让IOC容器来实现自动管理的话那么 一般情况下使用@Component

如果在开发中实在记不住注解 你可以都使用@Component来实现对象放入IOC容器 并让Spring来实现管理

12:AOP的使用

AOP:面向切面的编程

什么叫面向切面的编程?就是将软件开发的过程中 遇到的重复代码抽取出来形成一个专门的类 这个类就叫做切面类,在软件的正常的运行过程中 需要使用我们抽取出来的重复代码的时候 通过代理的设计模式 动态的植入我们的重复代码的这种编程的思想 就叫做面向切面编程

AOP编程的最大的用处:做风险控制、用户的行为记录、用户的行为日志 一般在做的时候是做成表

系统的运行日志:这个日志一般是吸入到我们的文件中

12.1:传统模式的使用

12.1.1:编写我们的DAO类

12.1.2:编写业务逻辑类

12.1.3:编写切面类

12.1.4:测试

12.2:使用的是cglib代理来实现aop的使用

12.2.1:编写UserDAO的类(同上)

12.2.2:编写UserService的类

12.2.3:编写代理类(UserServiceProxy)

12.2.4:测试

12.3:AOP中注解模式的使用

常见的注解:

@Component          //第一步:将AOP类放入到IOC容器

@Aspect             //表明当前的类是一个切面类

@Scope(value="singleton")   //切面类一般在类中都是单例的

@Pointcut(value="execution (* com.qf.aop1.UserService.*(..))")          //这个里面编写的表达式就称为 切入点表达式

@Around(value="pt()")       //环绕的意思  在方法执行的前后来进行执行

@AfterReturning(value="pt()")    //在方法执行完成之后执行

@AfterThrowing(value="pt()")    //方法出现异常的时候执行

@Before(value="pt()")        //在切入点表达式的位置的方法执行之前执行的代码  后面的value表示的是在某一个地方去执行这个方法

@After(value = "pt()")        //方法执行之后进行执行

 12.3.1:AOP配置文件的使用

12.4:AOP的配置模式的使用

   12.4.1:将所有的注释给弄掉

   12.4.2:编写配置文件

   12.4.3:测试(同上)

13:Spring中DAO模块的使用(JdbcTemplate的使用)

Spring中的这个DAO模块的主要功能是:就是提供了数据库的功能访问、类似于dbutils

只不过是Spring这个框架提供的一种访问数据库的功能而已(基本不用)

13.1:导包

C3P0的包

mysql的驱动包

Spring的核心功能包

Spring的DAO的包

13.2:编写配置文件

13.3:在DAO中使用jdbcTemplate完成数据库的操作

13.4:测试(同上)

14:  事务

14.1:通过配置的方式来实现事务


测试:详情见代码(注意:你可以通过设置异常来看 事务是否起作用)

14.2:通过注解的模式来实现事务

14.2.1:配置文件的编写

14.2.2:在Service中配置事务的使用

14.2.3:测试的使用

 

15:注意事项

15.1:生产环境中事务是不能加在DAO层的、所有的事务处理都是加在Service层的、因为一个业务是否成功 才表示了当前的操作是否是成功的

15.2:如果开发中事务不回滚  那么你就手动的抛出一个运行时异常 这样事务就会回滚了

如果你觉得浅羽的文章对你有帮助的话,请在微信搜索并关注「 浅羽的IT小屋 」微信公众号,我会在这里分享一下计算机信息知识、理论技术、工具资源、软件介绍、后端开发、面试、工作感想以及一些生活随想等一系列文章。所见所领,皆是生活。慢慢来,努力一点,你我共同成长...

我建立了一个技术群,如果你想了解到更多关于IT行业的技术以及生活中遇到的问题,欢迎小伙伴进群交流,只需添加我的微信,备注进群即可,期待你们的加入。

往期推荐

Java泛型需要注意的问题

如何在Java中创建优雅的对象来提升程序性能

多图,一文了解 8 种常见的数据结构

干货!MySQL优化原理分析及优化方案总结

硬核!15张图解Redis为什么这么快

自媒体人必不可少的多平台同步、一文多发小助手

程序员必备的技术网站合集

关于图片处理的那些事

浅羽

留言区

点个赞,证明你还爱我

一文带你了解Spring框架的基本使用相关推荐

  1. 一文带你实现RPC框架

    原文地址:一文带你实现RPC框架 想要获取更多文章可以访问我的博客 - 代码无止境. 现在大部分的互联网公司都会采用微服务架构,但具体实现微服务架构的方式有所不同,主流上分为两种,一种是基于Http协 ...

  2. spring boot web项目_阿里技术专家带你使用Spring框架快速搭建Web工程项目

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 第一时间与你相约 每日英文 We all have a past. It's how you deal with it. 每个人 ...

  3. 一文带你了解Spring核心接口Ordered的实现及应用

    前言 最近在看框架的时候,发现了这个接口,在此进行总结,希望能够给大家帮助,同时提升自己. order接口的大体介绍 Spring框架中有这个一个接口,名字叫Ordered,联想我们在数据库中应用的O ...

  4. spring框架_一篇文章带你理解Spring框架

    虽然现在流行用SpringBoot了,很多配置已经简化和封装了,但是对于Spring的一些基础我们了解一些是对我们自己的架构思想很有帮助的!接下来和笔者一起来探讨一下Spring框架吧! 1.什么是S ...

  5. 一文带你认识Spring事务

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y Spring事务管理我相信大家都用得很多,但可能仅仅 ...

  6. 一文带你了解React框架

    前言 由于 React的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单.所以,越来越多的人开始关注和使用,认为它可能是将来 Web 开发的主流工具. 这个项目本身也越滚越大,从最早的U ...

  7. 一文带你搞懂从动态代理实现到Spring AOP

    摘要:本文主要讲了Spring Aop动态代理实现的两种方式. 1. Spring AOP Spring是一个轻型容器,Spring整个系列的最最核心的概念当属IoC.AOP.可见AOP是Spring ...

  8. Spring框架文档(二 )

    @[TOC](文章目录) 原文英文链接: https://docs.spring.io/spring/docs/5.2.3.BUILD-SNAPSHOT/spring-framework-refere ...

  9. RPC框架:一文带你搞懂RPC

    RPC是什么(GPT答) ChatGPT回答: RPC(Remote Procedure Call)是一种分布式应用程序的编程模型,允许程序在不同的计算机上运行.它以一种透明的方式,将一个程序的函数调 ...

最新文章

  1. 刚学会深拷贝一个对象,学妹却问我怎么深拷贝一个图
  2. dataset for person re-id
  3. 第一章新增例题:访问修饰符
  4. 【SpringMVC 之应用篇】 1_SpringMVC入门 —— 第一个 Spring MVC 程序
  5. golang设置运行CPU数量及sync.Mutex全局互斥锁的使用示例
  6. 使用 std::shared_ptr 和 std::unique_ptr 测试 boost/pointer_cast.hpp
  7. C++const 对指针和引用的作用
  8. c语言各个英文的作用,C语言最重要的知识点复习资料(国外英文资料).doc
  9. 国内首款 5G 机型开售;Google Chrome 大部分插件无人用;Firefox 69 Beta 9 发布 | 极客头条...
  10. 据说被称为世上最经典的25句话!
  11. 『ORACLE』 Linux和oracle用户下的常用命令(11g)
  12. 计算机程序设计语言发展经历了,简述计算机程序设计语言的发展历程
  13. 使用CImageList的一点心得
  14. 网易云自动化爬虫方案,24小时爬取10万首音乐信息,30万条用户信息,100万个热评
  15. android studio sdk samples,qcloud-sdk-android-samples
  16. 数据分析复盘报告,用Excel轻松搞掂!
  17. Android下载地址
  18. 小猫爪:i.MX RT1050学习笔记7-Power Supply
  19. ORA-00257:archiver error.Connect internal only, until freed 问题解决
  20. 腾讯云双十一活动读解

热门文章

  1. 大学计算机考试五月份报名,2021年5月全国计算机等级考试报名时间
  2. Python Flask学习_用户角色和用户权限
  3. linux 让代码美观,为什么 Python 代码要写得美观而明确 | Linux 中国
  4. POWERBI|行级别权限
  5. TIOBE 6 月编程语言排行榜:C++ 即将超越 Java
  6. loopback 搭建
  7. python dateutil_Python 常用日期处理 -- calendar 与 dateutil 模块的使用
  8. tcla919刷机成功!!!
  9. C++对C语言的扩展
  10. matlab批量合并txt文件