`
文章列表
17.4 组合多个配置 通常在使用基于Java类的配置时我们可能不是单独使用一个Java类进行配置,有的时候可能会建立多个Java类进行配置,也可能是基于Java类的配置和基于XML的配置一起使用,这就需要我们将多个配置整合在一起了。 17.4.1 多个Java类配置组合 对于多个Java配置类的情况,我们可以通过将@Import标注在对应的配置类上以引入另外一个配置类,这样我们在使用的时候就可以只以其中的某个或某几个配置类来直接作为配置类。如下示例我们在配置类SpringConfig上使用@Import引入了另外两个配置类ServiceConfig和DaoConfig。 @Con ...
17.2 @Configuration @Configuration是标注在Class上的,当我们需要基于Java类的形式对Spring进行配置时,我们就需要在对应的配置类上使用@Configuration进行标注,这样Spring才会把对应的Class当做是一个配置用的Class。使用@Configuration进行标注的配置类默认也会被Spring作为一个bean进行注册。所以当我们的拥有多个@Configuration进行标注的配置类时,如果需要进行依赖注入时对应的依赖项处于不同的@Configuration配置类时也可以通过注入@Configuration配置类,然后通过注入的@Co ...
17 使用Java类的形式配置bean定义 除了传统的使用XML来配置底层的bean容器定义,Spring还支持使用大家熟悉的Java类的形式来进行配置。使用Java类的形式来进行配置时我们将使用一个Java类来作为配置的主体,并在类上使用@Configuration进行标注,表示其是一个配置类。然后将对应的bean定义都定义为Java配置类中的一个公用方法,并在方法上使用@Bean进行标注,表示其是一个bean定义。使用@Bean进行标注的方法对应的返回类型就是生成的bean定义对应的Class类型,对应的方法体实现就是我们用来产生对应bean定义的实例的过程,对应的方法名就是bean定义 ...
16 对JSR330标准注解的支持 除了使用Spring标准的注解来定义bean、定义bean之间的依赖关系外,Spring还支持使用JSR330标准的注解来进行相关的定义,主要是对@Inject和@Named两个注解的支持。 要使用JSR330标准的注解进行对应的bean定义,我们首先需要将JSR330标准对应的jar包加入我们的classpath。笔者习惯使用Maven来管理相应的依赖,所以笔者只需要在项目的pom.xml文件中加入如下依赖项即可。 <dependency> <groupId>javax.inject</groupId> ...
15.5 过滤器 默认情况下,Spring将扫描所有@Component、@Controller、@Service和@Repository标注的类,以及这几个注解所派生出来的注解所标注的类,如之前介绍的自定义的@MyComponent注解,并将它们作为一个bean定义在对应的bean容器中。Spring提供了两个filter定义可以让我们对需要扫描的类进行进一步的过滤,一个是<context:include-filter/>,一个是<context:exclude-filter/>。这两个filter的配置基本是一样的,所不同的是它们的功能。<context:i ...
15 使用注解进行bean定义 除了在Spring配置文件中通过bean元素定义一个bean外。我们还可以通过在Class上使用特定的注解进行标注,然后让Spring去扫描这些特定的注解,并把它们当做一个bean进行定义。 15.1 @Component @Component是Spring中用来定义bean最基本的注解,通过在Class类上标注对应的注解就可以让Spring扫描到对应的定义,并把其作为一个bean定义到对应的bean容器中。 @Component public class Hello { } 当Spring扫描到这样
14.4 @Qualifier 14.4.1 简介 @Qualifier通常是配合@Autowired的一起使用的。我们知道使用@Autowired进行注入时默认是按照类型进行注入的。打个比方当我们使用@Autowired的定义beanA需要自动注入一个类型为BeanB的bean时,如果在bean容器中存在多个类型为BeanB的bean,那么Spring就会抛出异常。这个时候我们就可以使用@Qualifier来指定需要进行注入的到底是哪个BeanB类型的bean,具体bean是通过@Qualifier注解的value属性来进行指定的。以下示例表示我们通过@Qualifier指定我们需要注入 ...
14 基于注解的配置 除了单独使用XML对Spring进行配置外,我们还可以使用注解的方式来配置对应的bean定义。如哪些class要被定义为bean,对应的bean需要注入哪些内容等。在Spring的配置中XML定义与注解定义是可以同时存在的。 14.1 启用对注解的支持 如果需要使用注解来配置bean定义,首先我们需要启用Spring对注解的支持。最简单的方式就是在Spring的配置文件中引入context对应的命名空间,然后在其中定义一个<context:annotation-config/>即可。 <?xml version="1.0" ...
13 PropertyOverrideConfigurer 13.1 简介 打个比方我们在bean容器中定义了一个beanA,其中有一个属性propB,对应值为valueB,但是我又希望在不更改bean定义的情况下希望Spring在实例化beanA时将对应的属性propB的值改为valueC,那么这个时候我们就可以使用PropertyOverrideConfigurer来实现这个效果了。PropertyOverrideConfigurer实现了BeanFactoryPostProcessor接口,其将在Spring加载完对应容器中所有的bean定义之后根据定义的属性来覆盖bean定义中既有 ...
12.6 指定加载顺序 有的时候我们可能需要或者是希望定义多个PropertyPlaceholderConfigurer,这个时候我们可以通过setOrder()方法来指定PropertyPlaceholderConfigurer的处理顺序,值越小的越先处理。这样就有两个问题要考虑,当一个属性变量可以被多个PropertyPlaceholderConfigurer进行替换时,先处理的将优先替换,替换后对于后处理的PropertyPlaceholderConfigurer来说对应的变量已经不存在了也就不能再进行替换了。第二个需要考虑的问题是当某些属性变量只能由某些个PropertyPlaceh ...
12 PropertyPlaceholderConfigurer PropertyPlaceholderConfigurer是对BeanFactoryPostProcessor接口的一种实现,其允许我们在定义bean的时候将bean的某些属性定义为变量形式,然后由PropertyPlaceholderConfigurer在这些bean被实例化之前利用外部定义的属性文件或者其内部定义的属性等将这些变量替换成对应的属性值。 我们可能经常会见到或者用到这样的定义,context:property-placeholder是Spring context命名空间内置的一个标签,针对该标签Spring内 ...
11 BeanFactoryPostProcessor 在上一篇文章中介绍了BeanPostProcessor,我们可以通过自定义BeanPostProcessor实现对实例化以后的bean在调用其初始化方法前后加上特定的逻辑,即所谓的回调。在本文将要介绍的BeanFactoryPostProcessor和上一篇介绍的BeanPostProcessor接口类似,也是属于一个回调接口。所不同的是BeanPostProcessor接口回调对应的主体是bean,其可以在bean实例化以后但是在调用其初始化方法前后进行回调以达到对bean进行处理的效果。而在本文将要介绍的BeanFactoryPos ...
10 BeanPostProcessor 10.1 简介 BeanPostProcessor是Spring中定义的一个接口,其与之前介绍的InitializingBean和DisposableBean接口类似,也是供Spring进行回调的。Spring将在初始化bean前后对BeanPostProcessor实现类进行回调,与InitializingBean和DisposableBean接口不同的是BeanPostProcessor接口将对所有的bean都起作用,即所有的bean初始化前后都会回调BeanPostProcessor实现类,而InitializingBean和Disposab ...
9.7 自定义Scope 如果用户觉得Spring内置的几种Scope不能满足需求,则可以定制自己的Scope,即实现自己的org.springframework.beans.factory.config.Scope。Scope接口定义了如下几个方法,详情请参看Spring的API文档。 public interface Scope { Object get(String name,
9 bean作用范围(scope) 在Spring中使用Scope来表示一个bean定义对应产生实例的类型,也可以说是对应实例的作用范围。Spring内置支持的scope严格来说默认是有五种,分别是: singleton:这是默认Scope,表示在整个bean容器中或者说是整个应用中只会有一个实例。 prototype:多例类型,表示每次从bean容器中都会获取到一个对应bean定义全新的实例。 request:仅适用于Web环境下的ApplicationContext,表示每一个HttpRequest生命周期内会有一个单独的实例,即每一个Http请求都会拥有一个单独的实例。 se ...
Global site tag (gtag.js) - Google Analytics