IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring框架(浅谈) -> 正文阅读

[Java知识库]Spring框架(浅谈)

目录

1.Spring简介

1.1 什么是Spring:

1.2 Spring框架的优势

1.3 Spring能帮我们做什么

1.4 Spring核心框架结构图

2. Spring IOC和DI ???????

2.1 IOC: Inverse of Control(控制反转)

2.2? DI: Dependency Injection(依赖注入)

3.Spring AOP

3.1 AOP的目的

3.2 AOP当中的概念

Spring中的注解


1.Spring简介

??????? Spring框架是Java应用最广泛的框架,它成功的理念就在于IOC(Inversion of Control? 控制反转)和AOP(Aspect Oriented Programming? 面向切面编程)

1.1 什么是Spring:

1.Spring是一个轻量级的DI/IOC和AOP容器的开源框架

2.Spring提倡"最少侵入"的方式管理应用中的代码 这代表可以随时下载或安装Spring框架

1.2 Spring框架的优势

用两个字来说就是解耦,也可以说是提高代码复用性和方便修改增删功能,降低开发难度

下面来详细说一下Spring框架的优点:

1.低侵入/低耦合:降低组件之间的耦合性,实现各层之间的解耦

2.声明式事务管理:基于切面编程和惯例

3.方便集成其他框架:如Mybatis,Hibernate等

1.3 Spring能帮我们做什么

1.根据配置文件创建及组件对象之间的依赖关系

2.面向切面编程可帮我们无耦合的实现日志记录,统计和安全控制

3.能简化帮我们管理数据库事务

4.提供了第三方数据访问框架的无缝集成,自身提供JDBC模板方便访问数据库

5.提供了第三方Web框架的无缝集成,自身提供SpringMVC框架,方便Web层搭建

6.方便与Java EE整合,与更多技术整合(如:缓存框架)

1.4 Spring核心框架结构图

Spring?Core: Spring?的核心容器,它实现了?IOC?模式,提供了?Spring?框架的基本功能。
Spring?AOP: 即面向切面编程思想,把?Spring?框架直接与某个功能对接[8]。
Spring?DAO: 模式思想将业务逻辑代码与数据库交互代码分离,降低两者耦合
Spring?Web: 可以简化?MVC?框架的请求,使开发界面实现数据传输更加流畅。

2. Spring IOC和DI ???????

2.1 IOC: Inverse of Control(控制反转)

1.读作控制反转比较好理解,这不是什么技术,而是一种思想,就是将在程序中手动创建对象的控制权交给Spring框架进行管理

2.正控:如果要使用某个对象,需要自己去创建对象

3.反控:如果要使用某个对象,只需要从Spring容器中获取需要使用的对象,不关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架 ??

举个栗子:?

控制反转是个抽象的概念,下面我们举个栗子来说明一下

????????在生活中,想要得到一样东西的时候,第一反应就是去找这件东西,比如想喝奶茶,在没有奶茶店的时候,最直接的做法是:养一头奶牛,种茶叶,然后等收获到茶叶和牛奶再去自己煮奶茶(比较夸张,但便于理解).值得注意的是这些都是你自己主动创造的过程,也就是一杯奶茶需要你自己创造

??????? 然而现在,由于外卖的盛行,当想要喝奶茶,只要外卖下单,通过电话和地址直接由外卖员送到

????????这里注意:我们并没有自己主动创造奶茶,奶茶是奶茶店创造的,而不是我们,而且完全能达到我们的要求,甚至比我们创造的还要好很多!所以IOC简单来说就是帮我们管理了创建对象的一系列事情(对象的生命周期)说到这里大家应该理解IOC了叭

总结:

传统方式: 通过new关键字主动创建一个对象

IOC方式: 对象的生命周期由Spring来管理,直接从Spring里获取一个对象,IOC是反转控制,就像控??? ?????? ? ? ?? 制权从本来在自己手里,交个了Spring.

2.2? DI: Dependency Injection(依赖注入)

??????? 其实DI和IOC是同一个概念不同角度而已DI相对IOC而言,明确描述了"被注入对象依赖IOC容器配置依赖对象".接下来我们分析一下:

??????? 理解DI 的关键是:谁依赖谁?为什么要依赖?谁注入谁?注入了什么?

??????? 1.谁依赖谁:应该是应用程序依赖于IOC容器

??????? 2.为什么要依赖:应用程序需要IOC容器来提供对象需要的外部资源

??????? 3.谁注入谁:IOC容器注入应用程序的某个对象应用程序依赖的对象

??????? 4.注入了什么:注入某个对象所需要的外部资源(对象,资源,常量数据)

@Autowired注解

? 说明: 在对象中若需要使用属性注入,一般使用@Autowired注解

? 功能: 可将Spring容器中的对象自动注入到属性中

? 注入方式: 1.类型注入(默认): 若注入的属性是接口,则自动注入实现类
?????????????????? 2.名称注入(key): 一般不用

? 重要前提: 若需要依赖注入,则对象必须交给Spring容器管理

3.Spring AOP

??????? AOP(Aspect Oriented Program)面向切面编程,如果说IOC是Spring的核心,那么SpingAOP就是Spring最重要的功能之一了,在数据库事务中SpringAOP被广泛使用.

??????? 面向切面编程实际上是一种思想,把功能分为核心业务功能和周边功能

??????? 业务核心功能: 如登录,增加数据,删除数据都为业务核心

??????? 周边功能: 如性能统计,日志,事务管理等等

3.1 AOP的目的

??????? AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(如事务处理,日志管理,权限控制等)封装起来,便于减少系统代码的冗余,降低模块间的耦合度,并有利于未来的拓展性和可维护性.

3.2 AOP当中的概念

1.切入点(Pointcat):在哪些类哪些方法上切入(什么地方)

2.通知(Advice):在方法执行的时机(方法前/后/前后)做什么(强化的功能)

3.切面(Aspect):切面=切入点+通知 就是:在什么时机,什么地方,做什么增强

4.织入(Weaving):把切面加入到对象,并创建代理对象的过程(有Spring完成)

5.连接点(Joint point):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point

6.目标对象(Target):织入Aspect的目标对象.

??????? 我们可以这么理解AOP,首先它不影响主要业务的流程,这里把主要业务看成纵向的,AOP它需要横向注入到代码中,用来解决代码冗余,同时提高了代码的可用性,降低耦合,方便业务的修改

继续举个栗子

??????? 比如会员的机制,登录账号时会检测账号和密码和会员的等级,然后进行不同的操作,以下基本逻辑的基本写法

?

?

????????同样有个问题,我虽然不用每次都copy代码了,但是,每个接口总得要调用这个方法,于是就有了切面的概念,我将方法注入到接口调用的某个地方(切点)

?这就相当于面向切面的编程,把冗余的代码定义在接口里,然后横向注入到业务中

Spring中的注解

注解解释
Spring@AutowiredSpring提供的工具(由Spring的依赖注入工具(BeanPostProcessorBeanFactoryPostProcessor)自动注入。)
Spring@Configuration声明当前类是一个配置类(相当于一个Spring配置的xml文件)
Spring@Bean注解在方法上,声明当前方法的返回值为一个Bean。返回的Bean对应的类中可以定义init()方法和destroy()方法,然后在@Bean(initMethod=”init”,destroyMethod=”destroy”)定义,在构造之后执行init,在销毁之前执行destroy
Spring@Cacheable声明数据缓存
Spring@EnableAspectJAutoProxy开启SpringAspectJ的支持
Spring@Value值得注入。经常与Sping EL表达式语言一起使用,注入普通字符,系统属性,表达式运算结果,其他Bean的属性,文件内容,网址请求内容,配置文件属性值等等
Spring@PropertySource指定文件地址。提供了一种方便的、声明性的机制,用于向Spring的环境添加PropertySource。与@configuration类一起使用。
Spring@PostConstruct标注在方法上,该方法在构造函数执行完成之后执行。
Spring@PreDestroy标注在方法上,该方法在对象销毁之前执行。
Spring@Profile表示当一个或多个指定的文件是活动的时,一个组件是有资格注册的。使用@Profile注解类或者方法,达到在不同情况下选择实例化不同的Bean@Profile(“dev”)表示为dev时实例化。
Spring@EnableAsync开启异步任务支持。注解在配置类上。
Spring@Async注解在方法上标示这是一个异步方法,在类上标示这个类所有的方法都是异步方法。
Spring@Conditional根据满足某一特定条件创建特定的Bean
Spring@Enable*通过简单的@Enable*来开启一项功能的支持。所有@Enable*注解都有一个@Import注解,@Import是用来导入配置类的,这也就意味着这些自动开启的实现其实是导入了一些自动配置的Bean(1.直接导入配置类2.依据条件选择配置类3.动态注册配置类)
Spring@RunWith这个是Junit的注解,springboot集成了junit。一般在测试类里使用:@RunWith(SpringJUnit4ClassRunner.class) — SpringJUnit4ClassRunnerJUnit环境下提供Sprng TestContext Framework的功能
Spring@ContextConfiguration用来加载配置ApplicationContext,其中classes属性用来加载配置类:@ContextConfiguration(classes = {TestConfig.class(自定义的一个配置类)})
Spring@ActiveProfiles用来声明活动的profile–@ActiveProfiles(“prod”(这个prod定义在配置类中))
Spring@Scheduled注解在方法上,声明该方法是计划任务。支持多种类型的计划任务:cron,fixDelay,fixRate
Spring@WebAppConfiguration一般用在测试上,注解在类上,用来声明加载的ApplicationContext是一个WebApplicationContext。他的属性指定的是Web资源的位置,默认为src/main/webapp,我们可以修改为:@WebAppConfiguration(“src/main/resources”)
Spring@ImportResource虽然Spring提倡零配置,但是还是提供了对xml文件的支持,这个注解就是用来加载xml配置的。例:@ImportResource({“classpath
SpringAOP@Aspect声明一个切面(就是说这是一个额外功能)
SpringAOP@After后置建言(advice),在原方法前执行。
SpringAOP@Before前置建言(advice),在原方法后执行。
SpringAOP@Around环绕建言(advice),在原方法执行前执行,在原方法执行后再执行(@Around可以实现其他两种advice
SpringAOP@PointCut声明切点,即定义拦截规则,确定有哪些方法会被切入
SpringAOP@Transactional声明事务(一般默认配置即可满足要求,当然也可以自定义)

以上就是我对Spring框架的理解,希望可以帮助到大家,详细的代码及深入学习后期会发

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:37:29  更:2021-12-02 16:38:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:36:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码