- 浏览: 418703 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (71)
- spring-->>备忘笔记 (17)
- struts-->>备忘笔记 (4)
- hibernate-->>备忘笔记 (6)
- J2EE (10)
- linux (4)
- AOP (3)
- ibatis (1)
- bean (1)
- scop (1)
- IOC (2)
- Central Authentication Service (5)
- javascript-->>备忘笔记 (12)
- 程序人生 (2)
- MongoDB-->>备忘笔记 (2)
- java-->>静态与非静态语句块 (1)
- java-->>泛型 (1)
- java-->>线程 (4)
- java-->>堆栈 (1)
- java-->>jvm (1)
- java-->>工具类 (3)
- mysql-->>备忘笔记 (2)
- 设计模式-->>备忘笔记 (1)
- oracle-->>备忘笔记 (0)
- 互联网->>电子商务 (5)
最新评论
-
lihaiming:
shengouqiang 写道例如有两个线程同时执行(没有sy ...
java之yield(),sleep(),wait()区别详解-备忘笔记 -
zjxchase:
你的onlyMoney这个方法好像不太好用
js 之 Number 工具类 -
shengouqiang:
例如有两个线程同时执行(没有synchronized)一个线程 ...
java之yield(),sleep(),wait()区别详解-备忘笔记 -
u011028234:
楼主你这例子里边的SampleResource实体没有额?
spring 控制反转与依赖注入原理-学习笔记 -
yueerba:
[flash=200,200][url][url][img][ ...
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]事务传播级别隔离级别以及高并发下的应用经验
2012-02-12 01:06 10085事务是逻辑处理原子 ... -
spring声明式事务策略 aop拦截-学习笔记
2011-12-16 17:42 2197声明式事务管理: S ... -
spring中的@Transaction配置详解-学习笔记
2011-12-16 17:42 21372spring中的@Transaction配置详解 1、 ... -
spring AspectJ的Execution表达式-备忘笔记
2011-12-16 23:57 14070Aspectj切入点语法定义 在使用spring框 ... -
spring 配置文件实现AOP-学习笔记
2011-12-15 16:15 1593Spring 对AOP的支持I: Aspect默认情况 ... -
spring JDK的Proxy技术实现AOP功能和CGBLB-学习笔记
2011-12-15 16:05 1867动态代理类(以下简称为代理类)是一个实现在创建类时在运行时指定 ... -
spring容器自动扫面管理bean-学习笔记
2011-12-15 16:42 1549通过在classpath自动扫描方式把组件纳入sp ... -
spring的注入依赖之构造器注入- 学习笔记
2011-12-15 16:44 2178Spring的注入依赖(DI)主要有三种注入方式, ... -
spring 控制反转与依赖注入原理-学习笔记
2011-12-14 22:24 11797在Spring中有两个非常 ... -
spring Bean的作用域scope-学习笔记
2011-12-14 22:09 1844Spring容器最初提供了 ... -
添加xml文件自动提示方法,以spring配置文件为例-备忘录
2011-12-14 22:01 1058用eclipse,在导入相应的包后(有人说不导包也有提示,因为 ... -
基于Struts、Hibernate、Spring 的学习框架-笔记备忘
2011-12-13 20:24 1146基于Struts、Hibernate、Spring 的学 ... -
spring声明式事务策略 aop拦截-学习笔记
2011-12-13 20:20 1536声明式事务管理: Spring提供了声明式事务管理 ... -
三种实例化Spring中Bean对象的方式
2011-12-13 20:17 16571、使用类构造器实例化。 <!-- 使用类构造器实 ... -
spring中的@Transaction配置详解
2011-12-13 20:13 7966spring中的@Transaction配 ... -
SSH整合包详解.Struts2.2.3+Spring3.1.0.M2+Hibernate3.6.6-学习笔记
2011-12-13 20:33 1753SSH整合包详解: a) commons commo ...
相关推荐
在Spring Boot中,通过`@SpringBootApplication`注解标记的类,可以定义为主程序类,该类会自动启动Spring Boot应用,并配置Spring容器。 2. **Spring AOP(Aspect Oriented Programming,面向切面编程)**: AOP...
### Spring2.5注解(标注)学习笔记 在探讨Spring2.5中常见的四个注解之前,我们先简要回顾一下Spring框架的基本概念。Spring框架是一个轻量级的Java应用开发框架,它通过依赖注入(DI)和面向切面编程(AOP)等...
这篇博客文章《Spring学习笔记(7)----装配各种集合类型的属性》可能是对这一主题的深入探讨。 首先,我们要理解Spring的DI机制,它是Spring的核心特性之一,允许我们将组件的依赖关系在运行时自动注入,而不是硬...
2. **`@Autowired`注入**:当Bean被自动扫描后,Spring可以使用`@Autowired`注解自动装配依赖。这个注解告诉Spring,应该找到类型匹配的Bean来注入当前Bean的属性、构造器参数或方法。 3. **`@Configuration`与`@...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...
【SpringBoot核心特性】 SpringBoot是Spring框架的一个扩展,它旨在简化Spring应用程序的开发过程,...这份学习笔记涵盖了SpringBoot的基础特性和SpringCloud的负载均衡实践,对于深入理解这两个技术有极大的帮助。
这份"Spring框架学习笔记"涵盖了Spring框架的基础知识、核心组件以及高级特性,对于初学者来说是一份宝贵的资料。 一、Spring框架概述 Spring框架是为了解决企业应用开发的复杂性而设计的,它提供了一个全面的基础...
在本篇 Spring 学习笔记中,我们将探讨 Spring 的入门、优点、组成以及重要的IOC理论。 1. **Spring 简介** Spring 是一个开源的、免费的 Java 框架,它的目标是减少企业级开发的复杂性。它集成了许多现有的技术,...
Bean的自动装配是Spring框架为了简化配置文件而引入的功能,它能够自动地将Bean的实例注入到其他Bean中,无需显式指定。 - **方式**:包括byName、byType、constructor、autodetect等多种自动装配方式。 - **注意...
以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...
学习笔记可能会涵盖Spring Boot的起步依赖、启动器、自动配置原理,以及如何创建RESTful服务和健康检查端点。 总之,《Spring技术内幕 学习笔记》涵盖了Spring框架的众多核心知识点,从IoC容器、AOP到Web开发和数据...
本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...
马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...
### Spring学习笔记(最新版) #### 一、Spring框架简介 Spring框架是一个广泛使用的轻量级企业级应用框架,它提供了全面的解决方案来构建复杂的Java应用程序。Spring的核心特性包括依赖注入(Dependency Injection,...
本篇学习笔记主要探讨了Spring中的属性注入方式,包括了传统的XML配置注入、注解式注入以及使用Java配置类的方式。 一、XML配置注入 在Spring早期版本中,XML配置文件是定义Bean及其依赖关系的主要方式。属性注入...
### 马士兵Spring学习笔记知识点汇总 #### 一、面向接口编程(面向抽象编程) **概念:** 面向接口编程是指在设计系统时,尽量通过接口来定义各个组件之间的交互方式,而不是直接依赖于实现类。这种方式使得系统...
标题和描述均提到了“spring指南学习笔记”,这意味着文档聚焦于Spring框架的学习心得与关键概念。Spring是一个开源的Java企业级应用框架,以其强大的依赖注入(Dependency Injection, DI)和面向切面编程(Aspect ...
本教程将深入探讨Spring框架的核心概念及其在SSM整合中的作用,结合尚硅谷2022年的学习笔记,为开发者提供一份详尽的指南。 **一、Spring框架简介** Spring是一款开源的Java平台,它提供了全面的企业级应用开发解决...
在本篇"spring学习笔记(六)"中,我们将深入探讨Spring框架的核心特性——自动装配(Autowired)。自动装配是Spring框架提供的一种方便的依赖注入方式,它能够自动为bean找到并设置其所需的依赖,极大地简化了应用的...