Spring
文章平均质量分 86
weixin_42073629
这个作者很懒,什么都没留下…
展开
-
Spring @Async:Aysnc的异步执行的线程池实现原理
对于异步方法调用,从Spring3开始提供了@Async注解,该注解可以被标注在方法上,以便异步地调用该方法。调用者将在调用时立即返回,方法的实际执行将提交给Spring TaskExecutor的任务中,由指定的线程池中的线程执行。遇到开发人员只会简单的使用@Async注解,而不知其实现原理,更糟糕的是有时会错误的使用。本篇将深入源码分析@Async注解背后的实现原理,避免错误使用。@Async以下是@Async注解的源码,从源码中看到它可以被标注在类或方法上,用于实现方法的异步执行。当被标注原创 2021-07-04 17:37:45 · 502 阅读 · 2 评论 -
Spring @Async使用方法总结
在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring3.x之后,就已经内置了@Async来完美解决这个问题,本文将完成介绍@Async的用法。1. 何为异步调用? 在解释异步调用之前,我们先来看同步调用的定义;同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。 异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕;而是继续执...原创 2021-07-04 17:29:04 · 467 阅读 · 2 评论 -
Spring MVC通过AOP切面编程来拦截controller
示例1:通过包路径及类名规则为应用增加切面该示例是通过拦截所有com.dxz.web.aop包下的以Controller结尾的所有类的所有方法,在方法执行前后打印和记录日志到数据库。新建一个springboot项目1:首先定义maven<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2原创 2021-07-04 17:07:35 · 3322 阅读 · 1 评论 -
认识Java 代理机制
1. 常规编码方式在学习代理之前,先回顾以下我们的常规编码方式:所有interface类型的变量总是通过向上转型并指向某个实例的。1)首先,定义一个接口:publicinterfaceSmsService{Stringsend(Stringmessage);}2)然后编写其实现类:publicclassSmsServicseImplimplementsSmsService{publicStringsend(Stringmessag...原创 2021-05-16 18:14:11 · 121 阅读 · 0 评论 -
Spring 多数据源
在实际开发中,经常会遇到应用要访问多个库的情况,需要配置多个数据源。本文会介绍spring多数据源的典型场景,如何优雅的实现多数据源,并结合spring、mybatis源码进行分析,为什么在事务中,不能切换数据源。最后,还会提供一个多数据源的完整源码案例。1 多数据源的典型使用场景在实际开发中,经常可能遇到在一个应用中可能需要访问多个数据库的情况,以下是两种典型场景。1.1 业务复杂...原创 2020-04-21 22:35:20 · 677 阅读 · 0 评论 -
Spring 3 注解@Import、@ImportResource、@PropertySource、@Value、@ConfigurationProperties
一、@Import注解一般来说, 需要按模块或类别分割Spring XML bean文件成多个小文件,使事情更容易维护和模块化。例如<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...原创 2020-04-09 02:22:45 · 368 阅读 · 0 评论 -
Spring3 注解@ComponentScan、@Configuration、@Bean、@Scope
一、@ComponentScan注解<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http:...原创 2020-04-09 01:07:34 · 219 阅读 · 0 评论 -
Spring事务管理实现
Spring的事务管理有两种方式:一种是传统的编程式事务管理,即通过编写代码实现的事务管理;另一种是基于 AOP 技术实现的声明式事务管理。由于在实际开发中,编程式事务管理很少使用,所以我们只对 Spring 的声明式事务管理进行详细讲解。下面从数据访问方式上对事务实现做个详细阐述: <!-- 加载配置文件 数据源db.properties --> <conte...原创 2020-04-07 00:47:57 · 140 阅读 · 0 评论 -
Spring事务管理接口
Spring的事务管理是基于 AOP 实现的,而 AOP 是以方法为单位的。Spring 的事务属性分别为传播行为、隔离级别、只读和超时属性,这些属性提供了事务应用的方法和描述策略。在JavaEE 开发经常采用的分层模式中,Spring 的事务处理位于业务逻辑层,它提供了针对事务的解决方案。Spring事务管理有以下三个核心接口构成1. PlatformTransactionMana...原创 2020-04-06 23:19:51 · 892 阅读 · 0 评论 -
Spring对各种ORM的集成
Spring框架提供集成支持ORM包括Hibernate、Mybatis、JDO、JPA以及Oracle的Toplink。Spring在集成的方式上,几乎是相同的。但是,Spring的集成方式比较统一并不意味着所有的ORM解决方案都是一样的。我们应该根据具体的场景,来决定使用何种ORM解决方案。下面将通过Spring对比较流行的Hibernate和Mybatis这两种ORM方案的集成来进行阐述,最...原创 2020-04-06 12:32:41 · 441 阅读 · 0 评论 -
Spring 基于Template的JDBC使用
JDBC的尴尬 JDBC作为Java平台关系数据库的标准API,其成功是有目共睹的。几乎所有Java平台的数据访问,都直接地或者间接地使用了JDBC,他是整个Java平台面向关系数据库进行数据访问的基石。作为一个标准,无疑JDBC是成功的。但是要说JDBC在实际的使用过程中也是受人欢迎的,则不尽然了。JDBC标准主要面向较为底层的数据库操作,所有在设计过程中,比较贴近底层以提供尽可能...原创 2020-04-04 23:58:02 · 267 阅读 · 0 评论 -
Spring使用AspectJ开发AOP:基于XML和基于Annotation
AspectJ 是一个基于 Java语言的 AOP 框架,它扩展了 Java 语言。Spring2.0 以后,新增了对 AspectJ 方式的支持,新版本的 Spring 框架,建议使用 AspectJ 方式开发 AOP。使用 AspectJ 开发 AOP 通常有两种方式:基于 XML 的声明式。 基于 Annotation 的声明式。接下来将对这两种 AOP 的开发方式进行讲解。...原创 2020-04-01 00:31:22 · 415 阅读 · 0 评论 -
Spring通知类型及使用ProxyFactoryBean创建AOP代理
在《Spring JDK动态代理》和《Spring CGLlB动态代理》中,讲解了 AOP 手动代理的两种方式,下面通过讲解Spring的通知介绍 Spring 是如何创建 AOP 代理的。Spring 通知类型通过前面的学习可以知道,通知(Advice)其实就是对目标切入点进行增强的内容,Spring AOP 为通知(Advice)提供了 org.aopalliance.aop.Ad...原创 2020-04-01 00:22:57 · 229 阅读 · 0 评论 -
Spring CGLlB动态代理
通过《Spring JDK动态代理》教程的学习可以知道,JDK 动态代理使用起来非常简单,但是它也有一定的局限性,这是因为 JDK 动态代理必须要实现一个或多个接口,如果不希望实现接口,则可以使用 CGLIB 代理。CGLIB(Code Generation Library)是一个高性能开源的代码生成包,它被许多 AOP 框架所使用,其底层是通过使用一个小而快的字节码处理框架 ASM(Java字...原创 2020-03-31 22:47:32 · 171 阅读 · 0 评论 -
Spring JDK动态代理
JDK 动态代理是通过 JDK 中的 java.lang.reflect.Proxy 类实现的。下面通过具体的案例演示 JDK 动态代理的使用。1. 创建项目在 MyEclipse 中创建一个名称为 springDemo03 的 Web 项目,将Spring支持和依赖的 JAR 包复制到 Web 项目的 WEB-INF/lib 目录中,并发布到类路径下。2. 创建接口 Customer...原创 2020-03-31 22:35:22 · 276 阅读 · 0 评论 -
Spring AOP 实现原理
前面在学习代理模式的时候,了解到代理模式分为动态代理和静态代理。现在我们就以代理模式为基础先实现我们自己的AOP框架,再来研究Spring的AOP的实现原理。AOP的原理就是java的动态代理机制,下面先是对java的动态机制进行一个回顾:一、静态代理 先以静态代理实现,静态代理关键是在代理对象和目标对象实现共同的接口,并且代理对象持有目标对象的引用。public interfa...原创 2020-03-31 01:28:11 · 101 阅读 · 0 评论 -
spring AOP 之四:@AspectJ切入点标识符语法详解
Spring AOP支持的AspectJ切入点指示符(用来指示切入点表达式目的),在Spring AOP中目前只有执行方法这一个连接点(因为Spring基于动态代理,所以Spring只支持方法连接点。这与一些其他的AOP框架是不同的,例如AspectJ和JBoss,除了方法切点,它们还提供了字段和构造器接入点。Spring缺少对字段连接点的支持,无法让我们创建细粒度的通知,例如拦截对象字段的修改。...原创 2020-03-31 00:31:05 · 348 阅读 · 0 评论 -
spring AOP 之三:使用@AspectJ定义切入点
使用注解来创建切面是AspectJ 5所引入的关键特性。AspectJ 5之前,编写AspectJ切面需要学 习一种Java语言的扩展,但是AspectJ面向注解的模型可以非常简便地通过少量注解把任意类 转变为切面。AspectJ提供了五个注解来定义通知,如表4.2所示:表4.2 Spring使用AspectJ注解来声明通知方法示例1:Audience类:观看演出的切面...原创 2020-03-31 00:03:58 · 392 阅读 · 0 评论 -
spring AOP 之二:@AspectJ注解的3种配置
与 AspectJ 相同的是,Spring AOP 同样需要对目标类进行增强,也就是生成新的 AOP 代理类;与 AspectJ 不同的是,Spring AOP 无需使用任何特殊命令对 Java 源代码进行编译,它采用运行时动态地、在内存中临时生成“代理类”的方式来生成 AOP 代理。Spring 允许使用 AspectJ Annotation 用于定义方面(Aspect)、切入点(Point...原创 2020-03-30 23:56:41 · 955 阅读 · 0 评论 -
AspectJ入门
AOP的实现方式有两种:AOP框架在编译阶段,就对目标类进行修改,得到的class文件已经是被修改过的。生成静态的AOP代理类(生成*.class文件已经被改掉了,需要使用特定的编译器)。以AspectJ为代表 —— 静态AOP框架。 AOP框架在运行阶段,动态生成AOP代理(在内存中动态地生成AOP代理类),以实现对目标对象的增强。它不需要特殊的编译器。以Spring AOP为代表。——...原创 2020-03-30 23:40:20 · 325 阅读 · 0 评论 -
spring AOP 之一:spring AOP功能介绍
一、AOP简介 AOP:是一种面向切面的编程范式,是一种编程思想,旨在通过分离横切关注点,提高模块化,可以跨越对象关注点。Aop的典型应用即spring的事务机制,日志记录。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。主要功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等;主要的意图是:将日志记录,性...原创 2020-03-30 23:26:31 · 315 阅读 · 0 评论 -
Spring2.5基于Annotation装配Bean
Spring注解是从2.5版本开始提供的,基于注解的依赖注入功能延续了Spring框架内在IoC容器设计与实现上的一致性。除了依赖关系的“表达”方式上的不同,底层的实现机制基本保持一致。 Spring2.5提供的基于注解的依赖注入方式主要有@Autowired和@Qualifier;下面看看看看他们是如何使用的以及如何实现的?@Autowired:byTypepa...原创 2020-03-29 23:01:48 · 168 阅读 · 0 评论 -
Spring基于XML装配Bean
Bean 的装配可以理解为依赖关系注入,Bean 的装配方式也就是 Bean 的依赖注入方式。Spring容器支持多种形式的 Bean 的装配方式,如基于 XML 的 Bean 装配、基于 Annotation 的 Bean 装配和自动装配等。Spring 基于 XML 的装配通常采用两种实现方式,即设值注入(Setter Injection)和构造注入(Constructor Injectio...原创 2020-03-27 22:59:20 · 171 阅读 · 0 评论 -
Spring Bean的生命周期
Spring容器可以管理 singleton 作用域 Bean 的生命周期,在此作用域下,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁。而对于 prototype 作用域的 Bean,Spring 只负责创建,当容器创建了 Bean 的实例后,Bean 的实例就交给客户端代码管理,Spring 容器将不再跟踪其生命周期。每次客户端请求 prototype ...原创 2020-03-27 22:48:45 · 105 阅读 · 0 评论 -
Spring Bean的作用域
作用域的种类Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域。Spring3 为 Bean 定义了五种作用域,具体如下。1)singleton单例模式,使用 singleton 定义的 Bean 在 Spring 容器中只有一个实例,这也是 Bean 默认的作用域。2)prototype原型模式,每次通过 Spring 容器获取 prototype ...原创 2020-03-27 22:47:27 · 133 阅读 · 0 评论 -
Spring Bean的实例化
在面向对象的程序中,要想调用某个类的成员方法,就需要先实例化该类的对象。在Spring中,实例化 Bean 有三种方式,分别是构造器实例化、静态工厂方式实例化和实例工厂方式实例化。本节将针对这三种方式分别进行讲解。构造器实例化构造器实例化是指 Spring 容器通过 Bean 对应的类中默认的构造函数实例化 Bean。下面通过案例演示如何使用构造器实例化 Bean。1. 创建实...原创 2020-03-27 22:41:55 · 153 阅读 · 0 评论 -
Spring依赖注入的三种实现方式
依赖注入(Dependency Injection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念。当某个JAVA实例需要另一个 Java 实例时,传统的方法是由调用者创建被调用者的实例(例如,使用 new 关键字获得被调用者实例),而使用Spring框架后,被调用者的实例不再由调用者创建,而是由 Spring 容器创建,这称为控制反转。Spring 容器在创建被调用者的实例时,会...原创 2020-03-27 06:57:58 · 3012 阅读 · 0 评论 -
Spring IoC容器
oC 是指在程序开发中,实例的创建不再由调用者管理,而是由 Spring 容器创建。Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 Spring 容器中,控制权发生了反转,这就是 Spring 的 IoC 思想。Spring 提供了两种 IoC 容器,分别为 BeanFactory 和 ApplicationContext,接下来将针对这两种...原创 2020-03-26 02:01:57 · 101 阅读 · 0 评论 -
Spring是什么
Spring 被称为 J2EE 的春天,是一个开源的轻量级的 Java 开发框架, 具有控制反转(IoC)和面向切面(AOP)两大核心。Java Spring 框架通过声明式方式灵活地进行事务的管理,提高开发效率和质量。Spring 框架不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。Spring 框架还是一个超级粘合平台,除了...原创 2020-03-26 01:04:45 · 162 阅读 · 0 评论