`

深入使用Spring(一)

 
阅读更多

一、两种后处理器(Bean后处理器和容器后处理器)

      Spring框架提供了很好的扩展性,除了可以与各种第三方框架良好整合外,其IoC容器也允许开发者进行扩展,这种扩展甚至无须实现BeanFactory或ApplicationContext接口,而是允许通过两个处理器对IoC容器进行扩展。

       1、Bean后处理器是一种特殊Bean,这种特殊Bean并不对外提供服务,它甚至可以无须id属性,它主要负责对容器中的其他Bean执行后处理,例如为容器中的Bean生成代理等,这种Bean被称为后处理器。

          Bean后处理器必须实现BeanPostProcessor接口,它会在Bean实例创建成功后对Bean进行进一步增强处理,该接口包含如下两个方法:

           Object postProcessBeforeInitialization(Object bean,String name) throw BeansException目标Bean初始化之前被回调

           Object postProcessAfterInitialization(Object bean,String name) throw BeansException目标Bean初始化之后被回调

           关联之前基本用法中提到的init-method和实现InitializingBean后提供的afterPropertiesSet()方法,它们的调用顺序如下图

 

        如果采用BeanFactory作为Spring容器时必须手动注册BeanPostProcessor,如果用ApplicationContext作为容器则无需手动注册,它会自动检测到Bean后处理器,自动注册。

        如果需要对容器中谋一批Bean进行通用的增强处理,则可考虑使用Bean后处理器

       2、容器后处理器负责处理容器本身,它必须实现BeanFactoryPostProcessor接口,该接口必须实现如下一个方法:

          void postProcessorBeanFactory(ConfigurableListableBeanFactory beanFactory)由于此方法只是对Spring容器进行后处理,它并不需要完全替换Spring容器,因此该方法无需任何返回值。

        实现postProcessorBeanFactory接口的容器后处理器不仅可对BeanFactory执行后处理,也可以对ApplicationContext容器执行后处理。容器后处理器还可用来注册额外的属性编辑器。

        Spring已提供如下几个常用的容器后处理器。

        ①PropertyPlaceHolderConfigurer:属性占位符配置器。

           负责读取属性文件里的属性值,并将这些属性值设置成Spring配置文件的元数据,通过使用此后处理器可以将Spring配置文件中的部分元数据放在属性文件中设置,这种配置方式当然有其优势:可以将部分相似的配置(比如说数据库的URL、用户名和密码)放在特定的属性文件失踪,如果只需要修改这部分配置,则无需修改Spring配置文件,修改属性文件即可,从而降低修改配置文件产生错误的风险。(注意抽离得太多个属性文件,可能会降低Spring配置文件的可读性)

例:<bean class="org.springframework,beans.factory.config.PropertyPlaceHolderConfigurer">

           <property name="locations">

               <list>

                   <value>dbconn.properties</value>

                   <!--如果有多个属性文件,依次在下面列出来-->

                   <!--value>wawa.properties</value-->

               </list>

         </property>

</bean>

        ②PropertyOverrideConfigurer:重写占位符配置器。

            PropertyOverrideConfigurer的属性文件指定的信息可以直接覆盖Spring配置文件中的元数据。即:PropertyOverrideConfigurer允许XML配置文件中又默认的配置信息。

<bean class="org.springframework,beans.factory.config.PropertyOverrideConfigurer">

           <property name="locations">

               <list>

                   <value>dbconn.properties</value>

                   <!--如果有多个属性文件,依次在下面列出来-->

                   <!--value>wawa.properties</value-->

               </list>

         </property>

</bean>
属性文件里每条属性的格式必须是:beanName.property=value(beanName必须是容器中真实存在的bean名,否则程序将出错)程序无法知道BeanFactory定义是否被覆盖,仅仅通过查看XML配置文件无法知道配置文件的配置信息是否被覆盖,如有多个PropertyOverrideConfigurer对同一Bean属性进行了覆盖,最后一次覆盖将会获胜。
        ③CustomAutowireConfigurer:自定义自动装配的配置器。

        ④CustomScopeConfigurer:自定义作用域的配置器。

        容器后处理器通常用于对Spring容器进行处理,并且总是在容器实例化任何其他Bean之前,读取配置文件的元数据,并有可能修改这些元数据。如果有需要,程序可以配置多个容器后处理器,多个容器后处理器可设置order属性来控制容器后处理器的执行顺序。(为了给容器后处理器指定order属性,则要求容器后处理器必须实现Ordered接口,因此在实现BeanFactoryPostProcessor时,就应当考虑实现Ordered接口)

二、Spring的“零配置”支持Annotation

       1、搜索Bean类的Annotation

          ①@Component:标注一个普通的Spring Bean类

          ②@Controller:标注一个控制器组件类

          ③@Service:标注一个业务逻辑组件类

          ④@Repository:标注一个DAO组件类

         如果只需定义一个普通的Spring Bean,则直接使用@Component标注即可。但如果用@Controller、@Service或@Repository来标注这些Bean类,这些Bean类将作为特殊的JavaEE组件对待,也许能更好地被工具处理,或与切面进行关联。在未来Spring版本中,后三种也许还能携带更多语义,因此尽量考虑使用后三种代替@Component

         Spring并没有采用Rail框架的“约定优于配置“的方式(Rail要求将不同组件放在不同路径下,然后加载固定路径下的所有组件),指定了某些类可作为SpringBean类使用后,还需要让Spring搜索指定路径,此时需要在Spring配置文件中导入context Schema,并指定一个简单的搜索路径。



         在基于XML配置方式下,每个Bean实例的名称都由其id属性指定;在这种基于Annotation的方式下,Spring采用约定的方式来为这些Bean实例指定名称,这些Bean实例的名称默认是Bean类的首字母小写,其他部分不变。当然,Spring也允许在使用@Component标注时指定Bean实例的名称,如@Component("axe"),除此之外,我们还可通过为<component-scan.../>元素添加<include-filter.../>或<exclude-filter../>子元素来指定SpringBean类,<include-filter.../>只要位于指定路径下的Java类满足这种规则,即使这些类没有使用任何Annotation标注,Spring一样会将它们当成Bean类来处理。<exclude-filter../>指定满足该规则的Java类不会被当成Bean类处理

      2、指定Bean作用域的Annotation:@Scope("prototype")  类似xml配置中scope

      3、依赖配置的Annotation:@Resource(name='beanName') 类似xml配置中的<property ref...>,即可修饰Field,又可修饰setter方法,name属性可以省略,如果修饰的是setter方法,则name属性默认是setter方法去掉前面set子串、首字母小写后得到的子串,如果修饰的是Field,则name属性默认是Field值

      4、定制生命周期的Annotation,@PostConstruct对应XML配置中init-method,@PreDestroy对应XML配置中的destroy-method

      5、Spring3.0新增的Annotation   @DependsOn对应XML配置中的depends-on强制初始化Bean,@Lazy对应XML配置中的lazy取消预初始化

      6、自动装配、精确装配的Annotation   @Autowired 对应XML配置中的<autowire>可修饰Field或方法,采用byType的自动装配策略,@Qualifier通常用于修饰Field,精确装配

       例@Autowired

          @Qualifier(”steelAxe“)

          private Axe axe;

  • 大小: 23.3 KB
  • 大小: 56.3 KB
分享到:
评论

相关推荐

    Spring技术内幕:深入解析Spring架构与设计原理

    一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...

    Spring 揭秘 全面 深入了解Spring

    《Spring 揭秘:全面深入了解Spring》是一本旨在帮助开发者深入理解并熟练掌握Spring框架的权威指南。Spring是Java企业级应用开发中的基石,它以其模块化、易用性和强大的功能深受开发者喜爱。这本书详细阐述了...

    spring技术内幕第2版深入解析spring架构与设计原理

    在深入解析Spring技术内幕第2版中,会详细探讨Spring框架的核心架构与设计原理,Spring作为一个轻量级的Java平台,提供了全面的编程和配置模型,是企业级Java应用程序开发中广泛使用的技术之一。 Spring的核心特性...

    方志朋版——深入理解Spring Cloud与微服务构建.pdf

    《深入理解Spring Cloud与微服务构建》是针对Java开发者,特别是对微服务架构感兴趣的开发者的一本重要参考资料。Spring Cloud作为目前最流行的微服务框架之一,它提供了构建分布式系统所需的多种工具和服务,包括...

    Spring技术内幕:深入解析Spring架构与设计原理(第2版) .pdf

    《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》一书深入浅出地介绍了Spring框架的核心概念和技术细节,对于希望深入了解Spring内部工作机制的开发者来说是一本非常有价值的参考书籍。通过学习本书,...

    Spring技术内幕:深入解析Spring架构与设计原理[汇编].pdf

    Spring技术内幕:深入解析Spring架构与设计原理 Spring是Java企业应用开发的主要框架之一,其架构和设计原理对Java开发者具有重要影响。本文将深入解析Spring架构和设计原理,对Spring的核心概念、架构设计和关键...

    一步步深入理解Spring内部原理-带源码

    Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(IOC)和面向切面编程(AOP)功能闻名。为了深入理解Spring的内部原理,我们可以从以下几个关键知识点入手。 1. **依赖注入(Dependency Injection,...

    深入解析Spring+MVC与Web+Flow.pdf

    “《深入解析Spring MVCgn Web Flow》为Spring社区弥补了一大空白。” ——Lasse Koskela.JavaRanch版主,Test Driven作者“《深入解析Spring MVCgn Web Flow》是非常急缺的深入讲解Spring MVCf~~Spring Web Flow的...

    Spring技术内幕:深入解析Spring架构与设计原理.pdf

    Spring技术内幕:深入解析Spring架构与设计原理 Spring技术内幕 Spring是一个基于Java的开源框架,旨在简化Java企业应用的开发。Spring的目标是提供一个简洁、灵活、可扩展的框架,以帮助开发者快速构建企业级...

    《深入理解SpringCloud与微服务构建》_sample.pdf

    《深入理解SpringCloud与微服务构建》_sample.pdf 《深入理解SpringCloud与微服务构建》_sample.pdf 《深入理解SpringCloud与微服务构建》_sample.pdf 《深入理解SpringCloud与微服务构建》_sample.pdf

    Tom_深入分析Spring源码

    通过深入阅读和分析Spring源码,不仅可以提升我们的技术能力,还能培养我们对软件设计原则和模式的理解,为成为一名更优秀的开发者奠定基础。Tom老师的这份资料无疑是一份宝贵的资源,它将引导我们逐步揭开Spring的...

    咕泡学院_Tom_JavaVIP课程_深入分析Spring源码(第一阶段)1

    Spring 是一个广泛使用的开源 Java 应用开发框架,它的核心目标是简化企业级应用的开发。Spring 提倡轻量级和依赖注入(Dependency Injection,DI)的理念,允许开发者专注于业务逻辑,而不是对象的创建和管理。通过...

    Spring技术内幕:深入解析Spring架构与设计原理(第1部分)

    Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...

    Spring技术内幕:深入解析 Spring架构与设计原理.pdf

    第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...

    深入理解spring cloud与微服务构建 pdf高清完整版

    深入理解spring cloud与微服务构建 pdf高清完整版下载 带目录

    深入分析Spring源码.docx

    Spring框架作为Java领域最广泛使用的框架之一,其设计思想和实现方式对于开发者来说具有极高的学习价值。本篇将详细探讨Spring中运用的设计模式及其重要性。 首先,Spring框架中广泛应用了23种经典设计模式,如工厂...

    深入剖析Spring Web源码(含一二版)带目录

    这本书旨在帮助开发者深入理解Spring Web的工作原理,提升对Spring框架的使用和优化能力。下面将详细讨论Spring Web、Spring MVC以及Spring框架的相关知识点。 1. **Spring Web**:Spring Web是Spring框架的一部分...

    《深入理解Spring Cloud与微服务构建》word版本

    《深入理解Spring Cloud与微服务构建》是一本专注于讲解如何使用Spring Cloud构建高效、可靠的微服务系统的书籍。Spring Cloud作为目前最流行的微服务框架之一,它提供了大量的工具和服务,帮助开发者快速搭建分布式...

    深入浅出学spring

    《深入浅出学Spring》这一教学视频为Spring框架的学习提供了详尽且易懂的指导,尤其适合初学者。Spring框架是Java平台上的一个开源框架,它提供了一种全面的基础架构支持,让Java开发者能够开发出更为简洁、高效的...

Global site tag (gtag.js) - Google Analytics