
Spring
文章平均质量分 86
elim168
这个作者很懒,什么都没留下…
展开
-
Spring(34)——Spring Retry介绍
Spring Retry介绍Spring retry是Spring提供的一种重试机制的解决方案。它内部抽象了一个RetryOperations接口,其定义如下。public interface RetryOperations { <T, E extends Throwable> T execute(RetryCallback<T, E> retryCallback...原创 2019-05-18 21:34:26 · 4510 阅读 · 2 评论 -
Spring Aop(十二)——编程式的创建Aop代理之AspectjProxyFactory
编程式的创建Aop代理之AspectjProxyFactory之前已经介绍了一款编程式的创建Aop代理的工厂——ProxyFactory,其实ProxyFactory拥有的功能AspectjProxyFactory都有。它们虽然没有直接的继承关系,但是它们都继承自ProxyCreatorSupport,而创建代理对象的核心逻辑都是在ProxyCreatorSupport中实现的。所以说ProxyFa原创 2017-10-28 18:11:00 · 4657 阅读 · 0 评论 -
Spring Aop(五)——给Advice传递参数
5 给Advice传递参数Advice除了可以接收JoinPoint(非Around Advice)或ProceedingJoinPoint(Around Advice)参数外,还可以直接接收与切入点方法执行有关的对象,比如切入点方法参数、切入点目标对象(target)、切入点代理对象(this)等。5.1 获取切入点方法参数假设我们现在有一个id为userService的bean中定义了一个fi原创 2017-10-04 21:02:15 · 16873 阅读 · 2 评论 -
Spring(26)——PathMatchingResourcePatternResolver
PathMatchingResourcePatternResolver可以用来解析资源文件,主要是用来解析类路径下的资源文件。当然它也可以用来解析其它资源文件,如基于文件系统的本地资源文件。PathMatchingResourcePatternResolver在使用时可以直接new一个对象,new的时候可以通过使用带ResourceLoader参数的构造方法指定需要使用的ResourceLoader原创 2017-10-10 21:15:53 · 11546 阅读 · 1 评论 -
Spring Aop(四)——基于Aspectj注解的Advice介绍
4 基于Aspectj注解的Advice介绍之前介绍过,Advice一共有五种类型,分别是before、after return、after throwing、after(finally)和around。在使用注解的时候,它们对应的注解分别是@Before、@AfterReturning、@AfterThrowing、@After和@Around。 这几个注解都是在org.aspectj.lang原创 2017-10-03 21:43:11 · 4541 阅读 · 0 评论 -
Spring Aop(三)——Pointcut表达式介绍
3 Pointcut表达式介绍3.1 表达式类型标准的Aspectj Aop的pointcut的表达式类型是很丰富的,但是Spring Aop只支持其中的9种,外加Spring Aop自己扩充的一种一共是10种类型的表达式,分别如下。execution:一般用于指定方法的执行,用的最多。within:指定某些类型的全部方法执行,也可用来指定一个包。this:Spring Aop是基于代理的,生成的原创 2017-10-02 11:52:13 · 15936 阅读 · 1 评论 -
Spring(25)——ClassPathBeanDefinitionScanner
ClassPathBeanDefinitionScanner继承自ClassPathScanningCandidateComponentProvider,构造时要求指定一个BeanDefinitionRegistry对象,其扩展了一个scan方法,可以同时指定多个要扫描的包。底层在扫描bean定义时还是使用的父类的findCandidateComponents方法,但是扫描后会自动利用持有的Bea原创 2017-09-30 08:53:04 · 3861 阅读 · 3 评论 -
Spring(24)——自定义BeanDefinitionRegistryPostProcessor
24 自定义BeanDefinitionRegistryPostProcessorBeanDefinitionRegistryPostProcessor继承自BeanFactoryPostProcessor,是一种比较特殊的BeanFactoryPostProcessor。BeanDefinitionRegistryPostProcessor中定义的postProcessBeanDefinitio原创 2017-09-21 20:19:18 · 11935 阅读 · 0 评论 -
Spring Aop(六)——@DeclareParents介绍
6 @DeclareParents介绍@DeclareParents注解也是Aspectj提供的,在使用基于Aspectj注解的Spring Aop时,我们可以在切面中通过@DeclareParents指定满足指定表达式的类将自动实现某些接口。这个只是在运行时会将生成的代理类实现指定的接口。有接口就会有实现,对应的实现类也需要我们在@DeclareParents声明自动实现的接口时声明。现假设我们有原创 2017-10-06 17:56:33 · 6655 阅读 · 3 评论 -
Spring Aop(二)——基于Aspectj注解的Aop简单实现
2 基于Aspectj注解的Spring Aop简单实现Spring Aop是基于Aop框架Aspectj实现的,它不是完完全全的对Aspectj框架进行扩展和改造,而是利用Aspectj里面的一些功能来实现自己的Aop框架,其中就包括对Aspectj提供的注解的解析。之前已经提过Spring Aop和Aspectj实现的Aop之间的差别,这里就不再赘述。本文主要描述的是如何利用Aspectj提供原创 2017-09-28 08:39:19 · 3337 阅读 · 0 评论 -
Spring(22)——ApplicationEvent
22 ApplicationEventSpring允许我们在ApplicationContext中发布ApplicationEvent事件,然后对应的ApplicationListener可以用来监听对应的事件。当发布了一个ApplicationEvent后,在对应bean容器中实现了ApplicationListener接口的bean实例都会接收到对应的通知,即对应的ApplicationLis原创 2017-09-11 10:05:21 · 4291 阅读 · 0 评论 -
Spring Aop(一)——Aop简介
1 Aop简介AOP的全称是Aspect Oriented Programming,翻译成中文是面向切面编程。它的主要思想是在程序正常执行的某一个点切进去加入特定的逻辑。AOP框架中对AOP支持最完整的是Aspectj,Spring Aop是基于Aspectj实现的专门针对于Spring自身支持的Aop,它的功能没有Aspectj那么完整,它只作用于Spring bean容器中bean对象的某个方原创 2017-09-26 22:56:07 · 4455 阅读 · 2 评论 -
Spring(23)——SPEL表达式(四)
23.2.24 设置默认值SpEl表达式中支持“a?:b”这样的语法来设置默认值。其表示如果a不为null时其结果为a,否则就为b。@Testpublic void test24 () { ExpressionParser parser = new SpelExpressionParser(); Assert.assertTrue(parser.parseExpression("#abc?:原创 2017-09-18 17:26:51 · 7757 阅读 · 0 评论 -
Spring(21)——国际化MessageSource
21 国际化MessageSourceSpring中定义了一个MessageSource接口,以用于支持信息的国际化和包含参数的信息的替换。MessageSource接口的定义如下,对应的方法说明已经在方法上注释了。public interface MessageSource { /** * 解析code对应的信息进行返回,如果对应的code不能被解析则返回默认信息defaultMessa原创 2017-09-08 10:08:18 · 6323 阅读 · 0 评论 -
Spring Aop(七)——基于XML配置的Spring Aop
7 基于XML配置的Spring AOP基于XML配置的Spring AOP需要引入AOP配置的Schema,然后我们就可以使用AOP Schema下定义的config、aspect、pointcut等标签进行Spring AOP配置了。<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.or原创 2017-10-12 16:32:50 · 9527 阅读 · 0 评论 -
Spring Aop(八)——advisor标签
8 advisor标签advisor标签是需要定义在aspect标签里面的,其作用与aspect类似,可以简单的把它理解为一个特殊的切面,用于把一个Advice和一个Pointcut组合起来。一个advisor标签对应的就是一个Advisor接口的实现类,默认是DefaultBeanFactoryPointcutAdvisor实现。其使用的基本语法类似如下这样。<aop:config> <a原创 2017-10-14 09:40:04 · 9687 阅读 · 1 评论 -
Spring Aop(十一)—— 编程式的创建Aop代理之ProxyFactory
编程式的创建Aop代理之ProxyFactorySpring Aop是基于代理的,ProxyFactory是Spring Aop内部用来创建Proxy对象的一个工厂类。如果我们需要在程序运行时来动态的应用Spring Aop,则我们可以考虑使用ProxyFactory。使用ProxyFactory时,我们需要为它指定我们需要代理的目标对象、代理时我们需要使用的Advisor或Advice。如下示例就原创 2017-10-23 21:09:07 · 4319 阅读 · 0 评论 -
Spring(33)——ImportBeanDefinitionRegistrar介绍
ImportBeanDefinitionRegistrar介绍在上一篇博文http://elim.iteye.com/blog/2428994中介绍了ImportSelector的作用及其用法。本文需要介绍的ImportBeanDefinitionRegistrar的用法和作用跟ImportSelector类似。唯一的不同点是ImportBeanDefinitionRegistrar的接口方法v...原创 2019-03-04 18:50:57 · 2408 阅读 · 1 评论 -
Spring(32)——ImportSelector介绍
ImportSelector介绍在@Configuration标注的Class上可以使用@Import引入其它的配置类,其实它还可以引入org.springframework.context.annotation.ImportSelector实现类。ImportSelector接口只定义了一个selectImports(),用于指定需要注册为bean的Class名称。当在@Configurati...原创 2019-03-04 18:48:46 · 16932 阅读 · 17 评论 -
Spring(31)——WebClient介绍
Spring之WebClient介绍WebClient是从Spring WebFlux 5.0版本开始提供的一个非阻塞的基于响应式编程的进行Http请求的客户端工具。它的响应式编程的基于Reactor的。WebClient中提供了标准Http请求方式对应的get、post、put、delete等方法,可以用来发起相应的请求。下面的代码是一个简单的WebClient请求示例。可以通过WebClie...原创 2019-03-04 18:44:59 · 2668 阅读 · 1 评论 -
Spring(30)——RestTemplate介绍
Spring之RestTemplate介绍RestTemplate是Spring Web模块提供的一个基于Rest规范提供Http请求的工具。应用中如果需要访问第三方提供的Rest接口,使用RestTemplate操作将非常方便。RestTemplate中提供了一系列的getXXX、postXXX、putXXX、deleteXXX等方法,以供发起对应的Rest规范请求,以及更通用的exchang...原创 2019-02-26 20:48:17 · 859 阅读 · 1 评论 -
Spring(29)——整合Quartz
假设有一个QuartzTasks类,其有一个print方法,现需要在Spring中使用Quartz对其进行定时调度。我们先配置一个JobDetail,采用Spring提供的MethodInvokingJobDetailFactoryBean,其可以指定需要调度的对象及其方法名称。配置如下:<bean id="quartzTasks" class="com.elim.learn.spring...原创 2019-02-26 20:45:44 · 410 阅读 · 0 评论 -
Spring(27)——util命名空间
Spring之util命名空间util命名空间可以帮助我们快速的定义list、map、set等。如果要使用它,我们首先需要在XML配置文件中引入其对应的namespace。<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" x...原创 2019-02-20 16:55:58 · 2360 阅读 · 0 评论 -
Spring(28)——Task抽象
Spring为异步执行任务和定时任务抽象了TaskExecutor接口和TaskScheduler接口,Spring之所以进行这样的抽象是为了在其内部统一任务调度的接口。TaskExecutor和JDK自带的Executor有点类似,只定义了一个execute(),用来执行一个任务,至于对应的任务怎么调度的,则由具体的实现类来实现,比如可以使用一个新的线程,或者使用一个线程池来调度。而实际上Tas...原创 2019-02-21 23:42:18 · 1120 阅读 · 0 评论 -
Spring Aop(十六)——编程式的自定义Advisor
编程式的自定义Advisor概述大多数情况下,我们的Aop应用都可以通过Spring的Aop配置来进行(不管是基于注解的,还是基于XML配置的)。Spring Aop的核心就是Advisor,Advisor接口中暂时有用的就是getAdvice()方法,而isPerInstance()方法官方说暂时还没有应用到,生成的Advisor是单例还是多例不由isPerInstance()的返回结果决定,而由原创 2017-11-04 20:48:36 · 7139 阅读 · 0 评论 -
Spring Aop(十五)——Aop原理之Advised接口
Spring Aop原理之Advised接口通过之前我们介绍的ProxyFactory我们知道,Spring Aop是通过ProxyFactory来创建代理对象的。ProxyFactory在创建代理对象时会委托给DefaultAopProxyFactory.createAopProxy(AdvisedSupport config),DefaultAopProxyFactory内部会分情况返回基于JD原创 2017-11-04 20:43:57 · 13545 阅读 · 0 评论 -
Spring Aop(十四)——Aop自动创建代理对象的原理
Aop自动创建代理对象的原理我们在使用Spring Aop时,通常Spring会自动为我们创建目标bean的代理对象,以使用对应的Advisor。前提是我们在使用Spring Aop时是使用的<aop:config/>或<aop:aspectj-autoproxy/>,这是因为当我们在applicationContext.xml文件中通过<aop:config/>的形式定义需要使用Aop的场景时,S原创 2017-11-04 20:39:50 · 6354 阅读 · 0 评论 -
Spring Aop(十三)——ProxyFactoryBean创建代理对象
ProxyFactoryBean创建代理对象ProxyFactoryBean实现了Spring的FactoryBean接口,所以它跟Spring中的其它FactoryBean一样,都是基于工厂模式来获取一个bean的。ProxyFactoryBean就是用来获取一个对象的代理对象的FactoryBean。它也是继承自ProxyCreatorSupport类的,所以它的功能基本跟ProxyFactor原创 2017-11-04 20:34:07 · 7005 阅读 · 0 评论 -
Spring Aop(十)——编程式的Pointcut
编程式的Pointcut除了可以通过注解和Xml配置定义Pointcut之外,其实我们还可以通过程序来定义Pointcut。Spring Aop的切入点(Pointcut)对应于它的一个Pointcut接口,全称是org.springframework.aop.Pointcut。该接口的定义如下: public interface Pointcut { ClassFilter getClas原创 2017-10-16 23:10:22 · 5028 阅读 · 0 评论 -
Spring Aop(九)——基于正则表达式的Pointcut
基于正则表达式的PointcutJdkRegexpMethodPointcutSpring官方为我们提供了一个基于正则表达式来匹配方法名的Pointcut,JdkRegexpMethodPointcut。该Pointcut是继承自StaticMethodMatcherPointcut的。我们在定义JdkRegexpMethodPointcut时可以通过patterns和excludedPattern原创 2017-10-15 23:28:11 · 6219 阅读 · 0 评论 -
Spring(23)——SPEL表达式(二)
23.2.9 构造List在SpEl中可以使用“{e1,e2,e3}”的形式来构造一个List,如下示例中我们就构造了一个List。@Testpublic void test09() { ExpressionParser parser = new SpelExpressionParser(); ListInteger> intList = (ListInteger>)parser.parse原创 2017-09-15 08:45:39 · 4228 阅读 · 0 评论 -
Spring(23)——SPEL表达式(一)
23 SpEl23.1 简介Spring也有自己的EL,叫Spring Expression Language,简称SpEl。其可以在程序中单独使用,也可以在Spring应用中进行bean定义时使用。其核心是org.springframework.expression.Expression接口,Spring使用该接口来表示EL中的表达式。通过Expression接口的系列getValue()方法我原创 2017-09-14 08:55:28 · 4998 阅读 · 0 评论 -
Spring(20)——PropertySource
20 @PropertySource在之前介绍时提到过其默认会使用PropertySourcesPlaceholderConfigurer来进行对应的属性替换,其底层有使用PropertySource。@PropertySource是用来注册一个PropertySource的。PropertySource是用来表示一个name/value属性配对的资源的,可以简单的把它理解为我们熟悉的Proper原创 2017-09-04 19:22:37 · 5169 阅读 · 0 评论 -
Spring(09)——bean生命周期回调方法
9 生命周期回调方法对于Spring bean来讲,我们默认可以指定两个生命周期回调方法。一个是在ApplicationContext将bean初始化,包括注入对应的依赖后的回调方法;另一个是在ApplicationContext准备销毁之前的回调方法。要实现这种回调主要有三种方式:实现特定的接口、在XML配置文件中指定回调方法和使用JSR-250标准的注解。9.1 实现特定接口针对bean初始化原创 2017-07-18 09:05:32 · 6976 阅读 · 3 评论 -
Spring(10)——bean作用范围(二)——自定义scope
10.7 自定义Scope如果用户觉得Spring内置的几种Scope不能满足需求,则可以定制自己的Scope,即实现自己的org.springframework.beans.factory.config.Scope。Scope接口定义了如下几个方法,详情请参看Spring的API文档。public interface Scope { Object get(String name, Objec原创 2017-07-21 08:51:25 · 7783 阅读 · 0 评论 -
Spring(10)——bean作用范围
10 bean作用范围(scope)在Spring中使用Scope来表示一个bean定义对应产生实例的类型,也可以说是对应实例的作用范围。Spring内置支持的scope严格来说默认是有五种,分别是:singleton:这是默认Scope,表示在整个bean容器中或者说是整个应用中只会有一个实例。prototype:多例类型,表示每次从bean容器中都会获取到一个对应bean定义全新的实例。req原创 2017-07-21 08:46:26 · 15327 阅读 · 0 评论 -
Spring(05)——基于XML配置的自动注入(autowire)
5 基于XML配置的自动注入(autoWire)5.1 autowire通常如果我们需要给一个bean注入另一个bean时都是通过set方法或者构造方法进行注入,其实Spring也支持bean的自动注入。在定义bean时我们可以通过bean元素的autowire属性来指定是否需要给当前bean来自动注入其所关联的bean。autowire属性的可选值有四个。no:默认值。表示不进行自动注入。byN原创 2017-07-07 08:38:21 · 7674 阅读 · 0 评论 -
Spring(04)——p命名空间和c命名空间
4 p命名空间和c命名空间在通过构造方法或set方法给bean注入关联项时通常是通过constructor-arg元素和property元素来定义的。在有了p命名空间和c命名空间时我们可以简单的把它们当做bean的一个属性来进行定义。4.1 p命名空间使用p命名空间时需要先声明使用对应的命名空间,即在beans元素上加入xmlns:p="http://www.springframework.org原创 2017-07-06 09:05:22 · 16603 阅读 · 5 评论 -
Spring(03)——依赖注入
本文主要介绍Spring依赖注入的几种方式,包括set方法注入、构造方法注入,idref、级联注入等。原创 2017-07-03 17:52:44 · 5022 阅读 · 0 评论 -
Spring(08)——方法注入之替换方法实现
8方法注入之替换方法实现Spring提供了一种替换方法实现的机制,可以让我们改变某个bean某方法的实现。打个比方我们有一个bean,其中拥有一个add()方法可以用来计算两个整数的和,但这个时候我们想把它的实现逻辑改为如果两个整数的值相同则把它们相乘,否则还是把它们相加,在不改变或者是不能改变源码的情况下我们就可以通过Spring提供的替换方法实现机制来实现这一要求。替换方法实现机制的核心是Me原创 2017-07-12 09:44:41 · 5898 阅读 · 0 评论