spring框架

通过 ApplicationContext 发布 TestApplicationEvent 事件

杀马特。学长 韩版系。学妹 提交于 2020-02-28 14:07:41
Spring 提供了非常多的扩展接口,官方将这些接口称之为钩子,这些钩子会在特定的时间被回调,以此来增强 Spring 功能,众多优秀的框架也是通过扩展这些接口,来实现自身特定的功能,如 SpringBoot、mybatis 等。 1、Aware 系列接口 Aware 从字面意思理解就是“知道”、“感知”的意思,是用来获取 Spring 内部对象的接口。A ware 自身是一 个顶级接口,它有一系列子接口,在一个 Bean 中实现这些子接口并重写里面的 set 方法后,Spring 容器启动时,就会回调该 set 方法,而相应的对象会通过方法参数传递进去。我们以其中的 ApplicationContextAware 接口为例。 ApplicationContextAware 大部分 Aware 系列接口都有一个规律,它们以对象名称为前缀,获取的就是该对象,所以 ApplicationContextAware 获取的对象是 ApplicationContext 。 public interface ApplicationContextAware extends Aware { void setApplicationContext(ApplicationContext applicationContext) throws BeansException; }

spring aop 及实现方式

梦想的初衷 提交于 2020-02-28 13:50:16
一、AOP的基本概念: 1、什么是aop: AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。 在不改变原有的逻辑的基础上,增加一些额外的功能。代理也是这个功能,读写分离也能用aop来做。 AOP可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度

JAVA中的事务,事务模块总结

不想你离开。 提交于 2020-02-28 13:12:42
大家好,这是一个为了梦想而保持学习的博客。这是第二篇文章,分享一下我对【事务】的理解​。文章的风格会一直保持问答的方式讲述,这是我个人喜欢的一种风格,也是相当于模拟面试。 什么是事务? 简单的来说,一条SQL执行或则几条SQL一起执行时,我们希望这个SQL要么执行成功后提交,要么执行失败后回滚,这是我们最直观的理解。在上面这句话中,就包含了事务的几个必要属性: "执行成功后提交",意味着持久性;"执行失败后回滚",意味着一致性;"要么成功,要么失败",意味着原子性 。他们的具体理解如下: 原子性(A) :事务要么执行成功,要么执行失败,没有第三种状态。 一致性(C) :事务执行的前后数据要一致,也就是说执行成功后数据的更改和预期一致,执行失败需要回滚到更改前数据。 隔离性( I ) :多个事务并发执行时,相互隔离,互不影响。 持久性(D ):事务提交后,对数据的更改是永久性的。也就说,哪怕数据库崩溃了,那些数据也是可以被恢复过来的。 事务是如何实现的? 事务的实现分为两个部分,一个是数据库底层的事务实现,另外一个是基于Spring去实现事务管理。这里主要是讲数据库(mysql-innodb)层面的实现。下面会围绕上面所说的ACID属性来讲mysql的底层实现。 redo日志与原子性、持久性的关系 redo日志是mysql-innodb底层的一个日志文件

Spring(七)核心容器 - 钩子接口

天涯浪子 提交于 2020-02-28 09:59:23
目录 前言 1、Aware 系列接口 2、InitializingBean 3、BeanPostProcessor 4、BeanFactoryPostProcessor 5、ImportSelector 6、ImportBeanDefinitionRegistrar 7、FactoryBean 8、ApplicationListener 最后 前言 Spring 提供了非常多的扩展接口,官方将这些接口称之为钩子,这些钩子会在特定的时间被回调,以此来增强 Spring 功能,众多优秀的框架也是通过扩展这些接口,来实现自身特定的功能,如 SpringBoot、mybatis 等。 1、Aware 系列接口 Aware 从字面意思理解就是“知道”、“感知”的意思,是用来获取 Spring 内部对象的接口。Aware 自身是一个顶级接口,它有一系列子接口,在一个 Bean 中实现这些子接口并重写里面的 set 方法后,Spring 容器启动时,就会回调该 set 方法,而相应的对象会通过方法参数传递进去。我们以其中的 ApplicationContextAware 接口为例。 ApplicationContextAware 大部分 Aware 系列接口都有一个规律,它们以对象名称为前缀,获取的就是该对象,所以 ApplicationContextAware 获取的对象是

Spring Aop深度解析(未完...)

跟風遠走 提交于 2020-02-28 09:54:36
Spring Aop深度解析 关于spring Aop也接触了好多知识了,在此,做一个总结,以便学习 。 Spring Aop是什么? AOP(Aspect-OrientedProgramming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。 基本术语: (1) 切面(Aspect) 切面是一个横切关注点的模块化,一个切面能够包含同一个类型的不同增强方法,比如说事务处理和日志处理可以理解为两个切面。切面由切入点和通知组成,它既包含了横切逻辑的定义,也包括了切入点的定义。 Spring AOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中。 @Component @Aspect public class LogAspect { } 可以简单地认为, 使用 @Aspect 注解的类就是切面 (2) 目标对象(Target) 目标对象指将要被增强的对象,即包含主业务逻辑的类对象。或者说是被一个或者多个切面所通知的对象。 (3) 连接点(JoinPoint) 程序执行过程中明确的点,如方法的调用或特定的异常被抛出。连接点由两个信息确定:

SpringBoot 之基础学习篇.

China☆狼群 提交于 2020-02-28 08:14:28
一、概念简介 SpringBoot 的关键词是“约定俗成”,它根据长久以来的 Spring 开发配置经验,整理出一套适用、普遍、大家都认可的配置方案。所以 SpringBoot 的学习过程中心态一定要放宽,没必要太去钻牛角尖,重点是配置和自定义... Spring Boot 简化了基于Spring的应用开发,为Spring平台及第三方库提供了开箱即用的设置,你只需要“run”就能创建一个独立的,产品级的 Spring 应用。 SpringBoot 的 Startsers 是以一个依赖描述符的集合,包含了很多搭建,快速运行项目所需要的依赖,并提供一致的,可管理传递性的依赖集。你可以获取所有 Spring 及相关技术的一站式服务,而不需要翻阅示例代码,拷贝粘贴大量的依赖描述符。所有官方的 starters 遵循相似的命名模式:spring-boot-starter-* 。 SpringBoot 的 Auto-configuration 设计成可以跟 Starters 一起很好的使用,AutoConfiguration 会根据你所依赖的 jar 包,会尽最大努力去自动配置你的应用。 Spring Boot 每次发布都关联一个 Spring 框架的基础版本,所以强烈建议你不要自己指定Spring版本。 二、spring-boot-devtools 开发者工具 spring-boot

Spring 配置解析之Properties

拟墨画扇 提交于 2020-02-28 07:55:17
1.简单示例: SpringBoot中的的配置简单属性类支持ConfigurationProperties方式,看一个简单的示例。 1 @ConfigurationProperties(prefix = "org.dragonfei.demo") 2 public class DemoProperties { 3 private String name; 4 private String password; 5 private String test; 6 7 public String getName() { 8 return name; 9 } 10 11 public void setName(String name) { 12 this.name = name; 13 } 14 15 public String getPassword() { 16 return password; 17 } 18 19 public void setPassword(String password) { 20 this.password = password; 21 } 22 23 public String getTest() { 24 return test; 25 } 26 27 public void setTest(String test) { 28 this.test =

Spring Boot 1.5.x 基础学习示例

☆樱花仙子☆ 提交于 2020-02-28 07:27:49
一、为啥要学Spring Boot?      今年从原来.Net Team“ 被 ”转到了Java Team开始了微服务开发的工作,接触了Spring Boot这个新瓶装旧酒的技术,也初步了解了微服务架构。Spring Boot是Spring4之后整合的产物,它摒弃了原来Spring的一大堆的配置,采用了约定大于配置的方式,还是原来的配方,还是原来的佐料,让各路开发人员能够快速地使用Java开发微服务程序。其实,当我们了解了Spring Boot之后,会发现ASP.Net Core和Spring Boot很像,他们都是适合做微服务的技术。不过,对于Spring Boot的资料和相关的生态"看"起来要好一些(比如我现在公司已经没有多少.Net的新项目了),对于.Net程序员来讲,多掌握一门开发技术的需求越来越明显。这两年间,博客园的.Net程序员已有不少转到了或者已经掌握了基于Java的微服务开发技术(Spring Boot & Spring Cloud),这也说明了市场的需求变化。对于我来说,虽然我不排斥Java也在积极学习Java,但我还是更爱.Net Core一些(没办法, C#用的最爽 ),可能这就是初恋的味道把。但是,我也强烈建议.Net程序员多掌握一门技术,特别是在当今Spring Boot等框架已经为我们降低了很多学习门槛的基础上

Spring的起源和背景

邮差的信 提交于 2020-02-28 07:21:53
上图为Spring框架的组成结构 下面这几张也是的 Spring将大量实际开发中需要重复解决的步骤,抽象成了一个框架。 其中Spring Core Container是Spring框架的核心机制。 Spring框架就是实现了AOP功能的IOC(IOC是啥)容器。 Spring为企业级开发提供了一个轻量级解决方案,其中包括: 基于依赖注入的机制; 基于AOP的声明式事务管理; 与多种持久层技术整合; 优秀的Web MVC框架; Spring贯穿表现层、业务层、 持久层。 Spring具有如下优点: 低侵入式设计(啥叫低侵入式?),代码污染极低。 独立于各种应用服务器(啥叫应用服务器?),基于Spring框架的应用,可以实现真正的Write Once、Run Anywhere。 Spring的DI容器(啥叫DI容器)降低了业务对象替换(啥叫对象替换?)的复杂性,提高了组件之间的解耦。 Spring的AOP可将一些通用任务如安全、事务、日志等进行集中式处理,提高更好复用。 Spring的ORM和DAO提供了与第三方持久层框架(例如Hibernate)的良好整合,简化了底层数据库方法。 项目中可以使用全部或者部分的Spring框架。 Spring的核心要点是:支持不绑定到特定J2EE服务容器的可重用业务和数据访问对象。 AOP,Aspect Oriented Programming

spring拾遗(一)——IOC的应用

陌路散爱 提交于 2020-02-28 03:45:05
前言 spring这个玩意,其实要单纯谈使用的话,其实内容也不少,工作中有些东西用的挺多,但是很不系统。去年也尝试过看spring的源码,但是通常陷入到"我是谁,我在哪儿的,我干嘛要看这玩意"的思考(因为太晕了),想想这玩意还是得学啊,不能因为不懂,不能因为它让我怀疑人生就放弃,还是得从头撸。后来思考发现自己太过依赖百度,忽略了官网这玩意,这次就从官网出发。总结一些更多的操作,让spring的学习更加系统。这篇博客并不是一个官网的翻译,整理的内容会非常零散,毕竟只是补充我们平常使用spring框架忽略的东西。 什么是IOC,IOC和DI有啥区别 这又是一个灵魂拷问,在面试中遇到过很多次,不同的人回答方式不同。个人觉得这个东西一句话就能解决,DI其实就是IOC的一种实现,IOC只是一种设计理念。除了DI的方式来实现IOC,DL的方式也是IOC的一种实现。(之前有一种说法,DI是IOC的另一种表达方式,感觉不太全面) 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称 DI ),还有一种方式叫“依赖查找”(Dependency Lookup ) 为什么要有IOC 自己new它不香吗?不好意思,自己new,真的香不起来