Spring核心之bean
文章平均质量分 86
介绍Spring bean的定义、初始化过程、依赖注入等基础内容。
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 · 4273 阅读 · 2 评论 -
Spring(33)——ImportBeanDefinitionRegistrar介绍
ImportBeanDefinitionRegistrar介绍在上一篇博文http://elim.iteye.com/blog/2428994中介绍了ImportSelector的作用及其用法。本文需要介绍的ImportBeanDefinitionRegistrar的用法和作用跟ImportSelector类似。唯一的不同点是ImportBeanDefinitionRegistrar的接口方法v...原创 2019-03-04 18:50:57 · 2346 阅读 · 1 评论 -
Spring(32)——ImportSelector介绍
ImportSelector介绍在@Configuration标注的Class上可以使用@Import引入其它的配置类,其实它还可以引入org.springframework.context.annotation.ImportSelector实现类。ImportSelector接口只定义了一个selectImports(),用于指定需要注册为bean的Class名称。当在@Configurati...原创 2019-03-04 18:48:46 · 16538 阅读 · 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 · 2524 阅读 · 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 · 785 阅读 · 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 · 385 阅读 · 0 评论 -
Spring(28)——Task抽象
Spring为异步执行任务和定时任务抽象了TaskExecutor接口和TaskScheduler接口,Spring之所以进行这样的抽象是为了在其内部统一任务调度的接口。TaskExecutor和JDK自带的Executor有点类似,只定义了一个execute(),用来执行一个任务,至于对应的任务怎么调度的,则由具体的实现类来实现,比如可以使用一个新的线程,或者使用一个线程池来调度。而实际上Tas...原创 2019-02-21 23:42:18 · 1085 阅读 · 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 · 2268 阅读 · 0 评论 -
Spring(26)——PathMatchingResourcePatternResolver
PathMatchingResourcePatternResolver可以用来解析资源文件,主要是用来解析类路径下的资源文件。当然它也可以用来解析其它资源文件,如基于文件系统的本地资源文件。PathMatchingResourcePatternResolver在使用时可以直接new一个对象,new的时候可以通过使用带ResourceLoader参数的构造方法指定需要使用的ResourceLoader原创 2017-10-10 21:15:53 · 11373 阅读 · 1 评论 -
Spring(25)——ClassPathBeanDefinitionScanner
ClassPathBeanDefinitionScanner继承自ClassPathScanningCandidateComponentProvider,构造时要求指定一个BeanDefinitionRegistry对象,其扩展了一个scan方法,可以同时指定多个要扫描的包。底层在扫描bean定义时还是使用的父类的findCandidateComponents方法,但是扫描后会自动利用持有的Bea原创 2017-09-30 08:53:04 · 3798 阅读 · 3 评论 -
Spring(24)——自定义BeanDefinitionRegistryPostProcessor
24 自定义BeanDefinitionRegistryPostProcessorBeanDefinitionRegistryPostProcessor继承自BeanFactoryPostProcessor,是一种比较特殊的BeanFactoryPostProcessor。BeanDefinitionRegistryPostProcessor中定义的postProcessBeanDefinitio原创 2017-09-21 20:19:18 · 11887 阅读 · 0 评论 -
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 · 7660 阅读 · 0 评论 -
Spring(23)——SPEL表达式(三)
23.2.16 new对象SpEl支持我们直接在表达式中使用Java中new对象的语法来new一个对象,在new对象的时候需要我们指定对应类的包名,java.lang包除外。如下示例中我们就在表达式中new了一个java.util.Date对象,然后调用了其toLocaleString()方法。 @Test public void test16() { ExpressionParser pa原创 2017-09-18 17:23:11 · 5551 阅读 · 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 · 4166 阅读 · 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 · 4852 阅读 · 0 评论 -
Spring(22)——ApplicationEvent
22 ApplicationEventSpring允许我们在ApplicationContext中发布ApplicationEvent事件,然后对应的ApplicationListener可以用来监听对应的事件。当发布了一个ApplicationEvent后,在对应bean容器中实现了ApplicationListener接口的bean实例都会接收到对应的通知,即对应的ApplicationLis原创 2017-09-11 10:05:21 · 4259 阅读 · 0 评论 -
Spring(21)——国际化MessageSource
21 国际化MessageSourceSpring中定义了一个MessageSource接口,以用于支持信息的国际化和包含参数的信息的替换。MessageSource接口的定义如下,对应的方法说明已经在方法上注释了。public interface MessageSource { /** * 解析code对应的信息进行返回,如果对应的code不能被解析则返回默认信息defaultMessa原创 2017-09-08 10:08:18 · 6237 阅读 · 0 评论 -
Spring(20)——PropertySource
20 @PropertySource在之前介绍时提到过其默认会使用PropertySourcesPlaceholderConfigurer来进行对应的属性替换,其底层有使用PropertySource。@PropertySource是用来注册一个PropertySource的。PropertySource是用来表示一个name/value属性配对的资源的,可以简单的把它理解为我们熟悉的Proper原创 2017-09-04 19:22:37 · 5122 阅读 · 0 评论 -
Spring(19)——Profile(二)
19.2 指定启用的profile前面已经介绍了profile的指定,我们知道指定了profile后则表示对应的内容只有在特定的profile下才会生效。当前应用究竟使用的是哪个profile,或者是哪些profile,这是需要我们来指定的。说的专业一点就叫激活,即只有处于激活状态的profile对应的定义才会生效,当然也包括那些没有指定profile的定义。在Spring中激活哪个profile原创 2017-08-21 16:12:22 · 4709 阅读 · 0 评论 -
Spring(19)——Profile(一)
19 Profile有的时候我们可能需要在不同的环境下使用不同的bean定义,如在开发环境直接使用直接定义的数据源,而在生产环境使用对应的JNDI数据源等。针对这种需求,Spring给我们引入了一个profile的概念,其允许我们将在特定环境下需要使用的bean定义为不同的profile,然后只有在对应的profile激活的情况下才使用对应的bean定义。打个比方我们有一个beanA需要在开发环境原创 2017-08-21 14:42:53 · 4649 阅读 · 0 评论 -
Spring(18)——使用Java类的形式配置bean(三)
18.4 组合多个配置通常在使用基于Java类的配置时我们可能不是单独使用一个Java类进行配置,有的时候可能会建立多个Java类进行配置,也可能是基于Java类的配置和基于XML的配置一起使用,这就需要我们将多个配置整合在一起了。18.4.1 多个Java类配置组合对于多个Java配置类的情况,我们可以通过将@Import标注在对应的配置类上以引入另外一个配置类,这样我们在使用的时候就可以只以其原创 2017-08-14 10:48:45 · 4821 阅读 · 0 评论 -
Spring(18)——使用Java类的形式配置bean(二)
18.2 @Configuration@Configuration是标注在Class上的,当我们需要基于Java类的形式对Spring进行配置时,我们就需要在对应的配置类上使用@Configuration进行标注,这样Spring才会把对应的Class当做是一个配置用的Class。使用@Configuration进行标注的配置类默认也会被Spring作为一个bean进行注册。所以当我们的拥有多个@原创 2017-08-14 10:43:58 · 5209 阅读 · 0 评论 -
Spring(18)——使用Java类的形式配置bean
18 使用Java类的形式配置bean定义除了传统的使用XML来配置底层的bean容器定义,Spring还支持使用大家熟悉的Java类的形式来进行配置。使用Java类的形式来进行配置时我们将使用一个Java类来作为配置的主体,并在类上使用@Configuration进行标注,表示其是一个配置类。然后将对应的bean定义都定义为Java配置类中的一个公用方法,并在方法上使用@Bean进行标注,表示其原创 2017-08-14 10:29:22 · 6751 阅读 · 0 评论 -
Spring(17)——对JSR330标准的支持
17 对JSR330标准注解的支持除了使用Spring标准的注解来定义bean、定义bean之间的依赖关系外,Spring还支持使用JSR330标准的注解来进行相关的定义,主要是对@Inject和@Named两个注解的支持。要使用JSR330标准的注解进行对应的bean定义,我们首先需要将JSR330标准对应的jar包加入我们的classpath。笔者习惯使用Maven来管理相应的依赖,所以笔者只原创 2017-08-10 09:16:31 · 7817 阅读 · 0 评论 -
Spring(16)——使用注解进行bean定义(二)
16.5 过滤器默认情况下,Spring将扫描所有@Component、@Controller、@Service和@Repository标注的类,以及这几个注解所派生出来的注解所标注的类,如之前介绍的自定义的@MyComponent注解,并将它们作为一个bean定义在对应的bean容器中。Spring提供了两个filter定义可以让我们对需要扫描的类进行进一步的过滤,一个是,一个是。这两个filt原创 2017-08-08 08:45:18 · 4992 阅读 · 0 评论 -
Spring(16)——使用注解进行bean定义
16 使用注解进行bean定义除了在Spring配置文件中通过bean元素定义一个bean外。我们还可以通过在Class上使用特定的注解进行标注,然后让Spring去扫描这些特定的注解,并把它们当做一个bean进行定义。16.1 @Component@Component是Spring中用来定义bean最基本的注解,通过在Class类上标注对应的注解就可以让Spring扫描到对应的定义,并把其作为一原创 2017-08-08 08:39:20 · 7417 阅读 · 0 评论 -
Spring(15)——基于注解的支持(二)
15.4 @Qualifier15.4.1 简介@Qualifier通常是配合@Autowired的一起使用的。我们知道使用@Autowired进行注入时默认是按照类型进行注入的。打个比方当我们使用@Autowired的定义beanA需要自动注入一个类型为BeanB的bean时,如果在bean容器中存在多个类型为BeanB的bean,那么Spring就会抛出异常。这个时候我们就可以使用@Quali原创 2017-08-07 17:18:00 · 4969 阅读 · 0 评论 -
Spring(15)——基于注解的支持
15 基于注解的配置除了单独使用XML对Spring进行配置外,我们还可以使用注解的方式来配置对应的bean定义。如哪些class要被定义为bean,对应的bean需要注入哪些内容等。在Spring的配置中XML定义与注解定义是可以同时存在的。15.1 启用对注解的支持如果需要使用注解来配置bean定义,首先我们需要启用Spring对注解的支持。最简单的方式就是在Spring的配置文件中引入con原创 2017-08-07 17:15:03 · 4783 阅读 · 0 评论 -
Spring(14)——PropertyOverrideConfigurer
打个比方我们在bean容器中定义了一个beanA,其中有一个属性propB,对应值为valueB,但是我又希望在不更改bean定义的情况下希望Spring在实例化beanA时将对应的属性propB的值改为valueC,那么这个时候我们就可以使用PropertyOverrideConfigurer来实现这个效果了。PropertyOverrideConfigurer实现了BeanFactoryPostProcessor接口,其将在Spring加载完对应容器中所有的bean定义之后根据定义的属性来覆盖bean定原创 2017-08-01 08:37:01 · 4964 阅读 · 0 评论 -
Spring(13)——PropertyPlaceholderConfigurer(二)之namespace
13.6 指定加载顺序有的时候我们可能需要或者是希望定义多个PropertyPlaceholderConfigurer,这个时候我们可以通过setOrder()方法来指定PropertyPlaceholderConfigurer的处理顺序,值越小的越先处理。这样就有两个问题要考虑,当一个属性变量可以被多个PropertyPlaceholderConfigurer进行替换时,先处理的将优先替换,替换原创 2017-07-28 08:53:05 · 4783 阅读 · 0 评论 -
Spring(13)——PropertyPlaceholderConfigurer
13 PropertyPlaceholderConfigurerPropertyPlaceholderConfigurer是对BeanFactoryPostProcessor接口的一种实现,其允许我们在定义bean的时候将bean的某些属性定义为变量形式,然后由PropertyPlaceholderConfigurer在这些bean被实例化之前利用外部定义的属性文件或者其内部定义的属性等将这些变量原创 2017-07-28 08:47:56 · 5084 阅读 · 0 评论 -
Spring(12)——BeanFactoryPostProcessor
12 BeanFactoryPostProcessor在上一篇文章中介绍了BeanPostProcessor,我们可以通过自定义BeanPostProcessor实现对实例化以后的bean在调用其初始化方法前后加上特定的逻辑,即所谓的回调。在本文将要介绍的BeanFactoryPostProcessor和上一篇介绍的BeanPostProcessor接口类似,也是属于一个回调接口。所不同的是Bea原创 2017-07-27 09:01:43 · 5101 阅读 · 0 评论 -
Spring(11)——可用来修改bean对象的BeanPostProcessor
11 可用来修改bean对象的BeanPostProcessor11.1 简介BeanPostProcessor是Spring中定义的一个接口,其与之前介绍的InitializingBean和DisposableBean接口类似,也是供Spring进行回调的。Spring将在初始化bean前后对BeanPostProcessor实现类进行回调,与InitializingBean和Disposabl原创 2017-07-26 14:29:37 · 15606 阅读 · 1 评论 -
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 · 7713 阅读 · 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 · 15155 阅读 · 0 评论 -
Spring(09)——bean生命周期回调方法
9 生命周期回调方法对于Spring bean来讲,我们默认可以指定两个生命周期回调方法。一个是在ApplicationContext将bean初始化,包括注入对应的依赖后的回调方法;另一个是在ApplicationContext准备销毁之前的回调方法。要实现这种回调主要有三种方式:实现特定的接口、在XML配置文件中指定回调方法和使用JSR-250标准的注解。9.1 实现特定接口针对bean初始化原创 2017-07-18 09:05:32 · 6903 阅读 · 3 评论 -
Spring(08)——方法注入之替换方法实现
8方法注入之替换方法实现Spring提供了一种替换方法实现的机制,可以让我们改变某个bean某方法的实现。打个比方我们有一个bean,其中拥有一个add()方法可以用来计算两个整数的和,但这个时候我们想把它的实现逻辑改为如果两个整数的值相同则把它们相乘,否则还是把它们相加,在不改变或者是不能改变源码的情况下我们就可以通过Spring提供的替换方法实现机制来实现这一要求。替换方法实现机制的核心是Me原创 2017-07-12 09:44:41 · 5832 阅读 · 0 评论 -
Spring(07)——单例注入多例之lookup-method
7 单例注入多例之lookup-methodSpring有一种机制,可以动态的实现或重写bean容器中指定bean的指定方法,然后将返回值指定为bean容器中的另一个bean。现针对前文提到的单例bean需注入多例bean的应用场景来谈谈如何使用这种机制。先假设我们有一个单例beanA需注入一个多例BeanB类型的bean,那么我们可以这样来做。1、在beanA对应的类中定义一个方法用来获取Bea原创 2017-07-11 09:14:47 · 5534 阅读 · 0 评论 -
Spring(06)——单例注入多例之注入ApplicationContext
6 单例注入多例之注入ApplicationContextSpring bean容器中的bean有单例bean,也有多例bean。当我们需要给一个单例beanA注入一个单例beanB,或者给一个多例beanA注入一个多例或单例beanB时,都可以通过配置让Spring的bean容器帮我们完成。但如果我们需要给一个单例beanA注入一个多例beanB时,仅仅通过配置Spring是无法帮我们的单例be原创 2017-07-10 13:57:30 · 7290 阅读 · 1 评论 -
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 · 7629 阅读 · 0 评论