引言

上一篇文章咱们有怎么介绍到如何通过XML的模式来定义Spring的扩大《Spring面试高频题如何:自定义XML schema 扩大》,好多人都在吐槽当初都什么年代了,xml还有人再用吗?这玩意早就过期了吧,还有必要去把握它吗?Spring官网都把这种形式放在最初面了,可想而知它的重要性到底怎么了?既然大家都吐槽了,那咱们明天持续来介绍下基于注解的Spring扩大。

JavaConfig 配置扩大

从Spring3.0开始Spring提供了JavaConfig的形式能够用来代替以前XML的这种形式,原来在XML配置里的都能够通过注解来一一替换实现。次要通过@Configuration,@Bean, @Import,和@DependsOn这几个注解来搭配实现的。这种形式也是SpringBoot所应用的。

@Configuration

@Configuration只能标记在类上,示意该类为JavaConfig类,使其能够被Spring IOC容器扫描辨认并创立Bean退出到容器中。@Configuration类就相当于以往的一个xml文件。上面咱们看一个官网提供的例子:

@Configurationpublic class AppConfig {    @Bean    public MyService myService() {        return new MyServiceImpl();    }

这个定义的JavaConfig就相当于原来如下XML的配置:

<beans>    <bean id="myService" class="cn.javajr.services.MyServiceImpl"/></beans>

@Bean

@Bean只能被标记在办法上,示意该办法返回一个Spring Bean,能够被IOC容器托管,相当于以前在xml文件中写的<bean/>元素。

  • name:指定一个或者多个bean的名字,当没有设置name时,Spring容器会默认将@Bean办法名作为bean name,当设置了name后,就不会再应用办法名,同时设置多个name时,除第一个name外,其余的都会作为bean的别名。相当于xml配置中的name属性。
  • initMethod:指定容器在初始化完bean后调用的办法。相当于xml配置中的init-method属性。
  • destroyMethod:指定在容器在销毁bean前调用的办法。相当于xml配置中的 destroy-method。
  • autowire:指定bean在主动拆卸时依赖注入应用的策略,取值能够参考Enum类Autowire 的三个常量:Autowire.BY_NAME,Autowire.BY_TYPE,Autowire.NO。

@Import

XML配置中的<import/>标签,基于JavaConfig提供了@Import来组合模块化的配置类,应用形式如下所示:

@Configuration()  @Import({ApplicationContextConfig.class})  public class ApplicationContextConfig {

下面就比较简单的介绍了几种通过JavaConfig注解来替换XML模式的注解,应用起来还是非常简单的,如果你有对以前的XML配置文件都比拟理解的话,应用JavaConfig就更加简略不便了。

Dubbo的JavaConfig

上篇文章咱们介绍了dubbo通过XML的形式自定义扩大,明天咱们就接着看看dubbo是如何通过JavaConfig来代替XML模式的扩大的。
咱们看看dubbo的服务提供者是如何通过注解来实现的

@Configuration@EnableDubbo(scanBasePackages = "org.apache.dubbo.samples.annotation.impl")@PropertySource("classpath:/spring/dubbo-provider.properties")static class ProviderConfiguration {}

@Configuration这个注解咱们下面曾经介绍过了,咱们重点看下@EnableDubbo这个注解
@EnableDubbo 其实又是@EnableDubboConfig @DubboComponentScan是通过这两个组合注解来实现的,
@EnableDubboConfig注解实现如下:

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documented@Import(DubboConfigConfigurationRegistrar.class)public @interface EnableDubboConfig {

这个注解应用了@Import(DubboConfigConfigurationRegistrar.class) 所以Spring 在解决
@EnableDubboConfig 注解 的时候就会去实例化DubboConfigConfigurationRegistrar
并且调用它的registerBeanDefinitions办法,这个办法次要是对propties文件进行解析并依据不同的配置
项生成对应类型的Bean对象。

总结

  • 通过基于XML和基于Java的配置扩大,能够使用户通过Spring应用咱们研发的组件,提供很好的易用性。
  • 尽管当初大多数都是采纳JavaConfig这种形式了,然而还是有人会比拟喜爱xml这种形式
    xml能够让配置集中化,所有的组件并不是扩散的,因而使你对beans有一个很好的概览,比方mybais配置文件、SpingMvc配置文件,都放在一起,如果你须要宰割文件,Spring能够帮你实现。而后(Spring)会通过外部<import>标签进行重新组合或者内部上下文文件进行聚合。
  • xml和JavaConfig 当然也是能够混合应用的,至于应用哪种形式还是看集体的编程习惯,没有哪种形式是相对的好,各有千秋。
  • 看完这两篇对于不同形式Spring的 扩大咱们是不是能够本人入手去实现一个了。

    完结

  • 因为本人满腹经纶,难免会有纰漏,如果你发现了谬误的中央,还望留言给我指出来,我会对其加以修改。
  • 如果你感觉文章还不错,你的转发、分享、赞叹、点赞、留言就是对我最大的激励。
  • 感谢您的浏览,非常欢送并感谢您的关注。
    伟人的肩膀摘苹果:
    https://javajr.cn