`

spring自动装配注解模式-学习笔记

阅读更多

 

spring 自动装配注解模式


1、什么是自动装配

2、自动装配的意义

3、自动装配有几种类型

4、如何启用自动装配

5、自动装配将引发的问题


1、什么是自动装配?

3 自动装配有几种类型? 

Spring reference 写道 


Mode                               Explanation 

no             No autowiring at all. Bean references must be defined via a ref   element. This is the default, 

                and changing this is discouraged for larger deployments, since explicitly specifying collaborators gives 

                greater control and clarity. To some extent, it is a form of documentation about the structure of a system. 


byName       Autowiring by property name. This option will inspect the container and look for a bean named exactly

                the same as the property which needs to be autowired. For example, if you have a bean definition which is 

                set to autowire by name, and it contains a master property(that is, it has a setMaster(..) method), Spring

                will look for a bean definition named master, and use it to set the property. 


byType       Allows a property to be autowired if there is exactly one bean of the property type in the 

               container. If there is more than one, a fatal exception is thrown, and this indicates that you 

               may not use byType autowiring for that bean. If there are no matching beans, nothing 

               happens; the property is not set. If this is not desirable, setting the dependency-check="objects" 

               attribute value specifies that an error should be thrown in this case. 


constructor    This is analogous to byType, but applies to constructor arguments. If there isn't exactly one 

                bean of the constructor argument type in the container, a fatal error is raised. 


autodetect     Chooses constructor or byType through introspection of the bean class. If a default 

                constructor is found, the byType mode will be applied. 


引用 


模式                  说明 

no            默认不使用autowiring。 必须显示的使用"<ref />"标签明确地指定bean合作者,对于部署给予更大的 

                控制和明了。 


byName       根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自 

               动装配。例如,在bean定义中将 autowire设置为by name,而该bean包含master属性(同时提供 

               setMaster(..)方法),Spring就会查找名为master的bean定义,并用它来装配给master属性。 


byType       如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的 

                bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean, 

                则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置 

                dependency-check="objects"让Spring抛出异常。 


constructor   与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类 

                型一致的bean,那么将会抛出异常。 


autodetect     通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。 

                如果发现默认的构造器,那么将使用byType方式。 



§4 如何启用自动装配? 

你可以参照以下的配置去启用自动装配 

引用 

<beans xmlns="http://www.springframework.org/schema/beans" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xmlns:aop="http://www.springframework.org/schema/aop" 

xmlns:tx="http://www.springframework.org/schema/tx" 

xsi:schemaLocation=" 

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" 

default- > 


当然,这里的byType你可以更改为其他你想要的装配类型。 


§5 自动装配将引发的问题? 

Spring reference 写道 


Some disadvantages of autowiring: 

? Autowiring is more magical than explicit wiring. Although, as noted in the above table, Spring is careful to 

avoid guessing in case of ambiguity which might have unexpected results, the relationships between your 

Spring-managed objects are no longer documented explicitly. 

? Wiring information may not be available to tools that may generate documentation from a Spring container. 


引用 


自动装配的一些缺点: 


尽管自动装配比显式装配更神奇,但是,正如上面所提到的,Spring会尽量避免在装配不明确的时候进行猜测,因为装配不明确可能出现难以预料的结果,而且Spring所管理的对象之间的关联关系也不再能清晰的进行文档化。 


对于那些根据Spring配置文件生成文档的工具来说,自动装配将会使这些工具没法生成依赖信息。 


自动装配可以减轻配置的工作量,但同时使得配置文件的可读性变得很差,因为你不可能从配置文件 

中获知这些对象之间得依赖关系,从而维护困难! 

注意: 

    当根据类型进行自动装配的时候,容器中可能存在多个bean定义跟自动装配的setter方法和构造器参数类型匹配。这样就会存在模棱两可的问题。如果bean定义不唯一,装配时就会抛出异常。 

    解决方案(任选其一): 

    1 放弃使用自动装配,使用显示装配。 

    2 将bean排除在自动装配之外, 

       

引用 


           两个功能: 

               1 通过设定bean定义中的'autowire-candidate'属性显式的设置为'true' 或 'false'来设置其是否为被自动装配 

                 对象。 

               2 使用对bean名字进行模式匹配来对自动装配进行限制,其做法是在<beans/>元素的 

                 'default-autowire-candidates' 属性中进行设置。可以使用通配符,如以'Repository'结尾的bean, 

                  那么可以设置为"*Repository“。 

       


    3 通过在bean定义中设置'primary'属性为'true'来将该bean设置为首选自动装配bean。 

    如何使用Spring autowire请取决于你的项目设计。

Spring reference 写道 

The Spring container is able to autowire relationships between collaborating beans. This means that it is 

possible to automatically let Spring resolve collaborators (other beans) for your bean by inspecting the contents 

of the BeanFactory. 


引用

Spring IOC容器可以自动装配(autowire)相互协作bean之间的关联关系。因此,如果可能的话 ,可以自动让Spring通过检查BeanFactory中的内容,来替我们指定bean的协作者(其他被依赖的bean)。

简而言之,就是对于bean当中引用的其他bean不需要我们自己去配置它改使用哪个类,Spring的自动装配可以帮组我们完成这些工作。

2 自动装配的意义? 

Spring reference 写道 

It is important to understand the various advantages and disadvantages of autowiring. Some advantages of 

autowiring include: 

? Autowiring can significantly reduce the volume of configuration required. However, mechanisms such as the 

use of a bean template (discussed elsewhere in this chapter) are also valuable in this regard. 

? Autowiring can cause configuration to keep itself up to date as your objects evolve. For example, if you need 

to add an additional dependency to a class, that dependency can be satisfied automatically without the need 

to modify configuration. Thus there may be a strong case for autowiring during development, without ruling 

out the option of switching to explicit wiring when the code base becomes more stable. 


引用 

理解自动装配的优缺点是很重要的。其中优点包括: 


自动装配能显著减少配置的数量。不过,采用bean模板(见这里)也可以达到同样的目的。 


自动装配可以使配置与java代码同步更新。例如,如果你需要给一个java类增加一个依赖,那么该依赖将被自动实现而不需要修改配置。因此强烈推荐在开发过程中采用自动装配,而在系统趋于稳定的时候改为显式装配的方式。

分享到:
评论

相关推荐

    spring ioc aop mvc boot-学习笔记.docx

    在Spring Boot中,通过`@SpringBootApplication`注解标记的类,可以定义为主程序类,该类会自动启动Spring Boot应用,并配置Spring容器。 2. **Spring AOP(Aspect Oriented Programming,面向切面编程)**: AOP...

    Spring2.5注解(标注)学习笔记

    ### Spring2.5注解(标注)学习笔记 在探讨Spring2.5中常见的四个注解之前,我们先简要回顾一下Spring框架的基本概念。Spring框架是一个轻量级的Java应用开发框架,它通过依赖注入(DI)和面向切面编程(AOP)等...

    Spring学习笔记(7)----装配各种集合类型的属性

    这篇博客文章《Spring学习笔记(7)----装配各种集合类型的属性》可能是对这一主题的深入探讨。 首先,我们要理解Spring的DI机制,它是Spring的核心特性之一,允许我们将组件的依赖关系在运行时自动注入,而不是硬...

    Spring学习笔记(9)----让Spring自动扫描和管理Bean

    2. **`@Autowired`注入**:当Bean被自动扫描后,Spring可以使用`@Autowired`注解自动装配依赖。这个注解告诉Spring,应该找到类型匹配的Bean来注入当前Bean的属性、构造器参数或方法。 3. **`@Configuration`与`@...

    spring学习笔记

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...

    SpringCloud学习笔记

    【SpringBoot核心特性】 SpringBoot是Spring框架的一个扩展,它旨在简化Spring应用程序的开发过程,...这份学习笔记涵盖了SpringBoot的基础特性和SpringCloud的负载均衡实践,对于深入理解这两个技术有极大的帮助。

    Spring框架学习笔记

    这份"Spring框架学习笔记"涵盖了Spring框架的基础知识、核心组件以及高级特性,对于初学者来说是一份宝贵的资料。 一、Spring框架概述 Spring框架是为了解决企业应用开发的复杂性而设计的,它提供了一个全面的基础...

    Spring学习笔记-cqupt

    在本篇 Spring 学习笔记中,我们将探讨 Spring 的入门、优点、组成以及重要的IOC理论。 1. **Spring 简介** Spring 是一个开源的、免费的 Java 框架,它的目标是减少企业级开发的复杂性。它集成了许多现有的技术,...

    狂神说Java-Spring学习笔记

    Bean的自动装配是Spring框架为了简化配置文件而引入的功能,它能够自动地将Bean的实例注入到其他Bean中,无需显式指定。 - **方式**:包括byName、byType、constructor、autodetect等多种自动装配方式。 - **注意...

    Spring的学习笔记

    以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...

    Spring技术内幕 学习笔记

    学习笔记可能会涵盖Spring Boot的起步依赖、启动器、自动配置原理,以及如何创建RESTful服务和健康检查端点。 总之,《Spring技术内幕 学习笔记》涵盖了Spring框架的众多核心知识点,从IoC容器、AOP到Web开发和数据...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    马士兵老师spring框架学习笔记

    马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...

    spring学习笔记(最新版)

    ### Spring学习笔记(最新版) #### 一、Spring框架简介 Spring框架是一个广泛使用的轻量级企业级应用框架,它提供了全面的解决方案来构建复杂的Java应用程序。Spring的核心特性包括依赖注入(Dependency Injection,...

    Spring学习笔记(8)----属性注入的方式

    本篇学习笔记主要探讨了Spring中的属性注入方式,包括了传统的XML配置注入、注解式注入以及使用Java配置类的方式。 一、XML配置注入 在Spring早期版本中,XML配置文件是定义Bean及其依赖关系的主要方式。属性注入...

    马士兵spring学习笔记

    ### 马士兵Spring学习笔记知识点汇总 #### 一、面向接口编程(面向抽象编程) **概念:** 面向接口编程是指在设计系统时,尽量通过接口来定义各个组件之间的交互方式,而不是直接依赖于实现类。这种方式使得系统...

    spring指南学习笔记

    标题和描述均提到了“spring指南学习笔记”,这意味着文档聚焦于Spring框架的学习心得与关键概念。Spring是一个开源的Java企业级应用框架,以其强大的依赖注入(Dependency Injection, DI)和面向切面编程(Aspect ...

    SSM 框架整合教程:二、Spring-尚硅谷学习笔记 2022 年

    本教程将深入探讨Spring框架的核心概念及其在SSM整合中的作用,结合尚硅谷2022年的学习笔记,为开发者提供一份详尽的指南。 **一、Spring框架简介** Spring是一款开源的Java平台,它提供了全面的企业级应用开发解决...

    spring学习笔记(六)

    在本篇"spring学习笔记(六)"中,我们将深入探讨Spring框架的核心特性——自动装配(Autowired)。自动装配是Spring框架提供的一种方便的依赖注入方式,它能够自动为bean找到并设置其所需的依赖,极大地简化了应用的...

Global site tag (gtag.js) - Google Analytics