我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring3之 bean AutoWi

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring3之 bean AutoWi

Autowiring collaborators 自动装配
Spring通过检查BeanFactory中的内容,来替指定其他被依赖的bean
优点:
1、显著减少配置的数量
2、以使配置与java代码同步更新
XML配置过程中可在<bean>标签中指定autowire属性,它有5个值(3中官方英文文档中只有前4个):
no :No autowiring,bean之间的关系必须通过ref标签来指定
byName :根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。
byType :如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check="objects"让Spring抛出异常。
constructor :与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。
@deprecated,autowire="autodetect"这个在spring2.5文档中还有见,但是在3中已经没了,3中的XML配置中添加些值会报错。
autodetect :通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。
但是在spring3的xsd文件中找到default这个值项,应该是替代autodetect 的吧:
spring3.0Xsd 文件中
default-autowire的属性只有no ,byName ,byType ,byType 这里既没有autodetect 也没有default
default-autowire-candidates 中值的设置解释:
A default bean name pattern for identifying autowire candidates:
e.g. "*Service", "data*", "*Service*", "data*Service".
Also accepts a comma-separated list of patterns: e.g. "*Service,*Dao".
See the documentation for the 'autowire-candidate' attribute of the
'<bean/>' element for the semantic details of autowire candidate beans.
但是,我测试了下,发现并没有作用?搜到一外文网页上说如同上写法,但是那是07年的帖子了。是不是spring3中这个配置没了作用?
将bean排除在自动装配之外
一、当采用XML格式配置bean时,<bean/>元素的 autowire-candidate属性可被设为false,这样容器在查找自动装配对象时将不考虑该bean。
二、使用对bean名字进行模式匹配来对自动装配进行限制。其做法是在<beans/>元素的'default-autowire-candidates'属性中进行设置。比如,将自动装配限制在名字以'Repository'结尾的bean,那么可以设置为"*Repository“。对于多个匹配模式则可以使用逗号进行分隔。注意,如果在bean定义中的'autowire-candidate'属性显式的设置为'true' 或 'false',那么该容器在自动装配的时候优先采用该属性的设置,而模式匹配将不起作用。
< !--EndFragment-->
测试代码:
com.spring305.test.autowire.po.IdCard.java
Java代码 复制代码 收藏代码
  1. public class IdCard {
  2. private String cardNo;
  3. private String desc;
  4. 。。。getter .setter
  5. }
public class IdCard {
	private String cardNo;
	private String desc;
。。。getter .setter
}
com.spring305.test.autowire.po.People.java
Java代码 复制代码 收藏代码
  1. public class People {
  2. private int id;
  3. private String name;
  4. private IdCard idCard;
  5. public People(){
  6. }
  7. //autowire="constructor" 要有此构造方法
  8. public People(IdCard idCard){
  9. this.idCard = idCard;
  10. }
  11. getter setter
  12. }
public class People {
	private int id;
	private String name;
	private IdCard idCard;
	public People(){
	}
	
	//autowire="constructor" 要有此构造方法
	public People(IdCard idCard){
		this.idCard = idCard;
	}
getter setter
}
class="lazy" data-src/testAutoWire.xml
Xml代码 复制代码 收藏代码
  1. <beans.... http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
  2. " default-autowire-candidates="*idCard" >
  3. <!-- default-autowire-candidates="*ple*,*ard*" 配置了,但是没有感觉到作用,并没有限制相应的 -->
  4. <!--beans标签中加上: default-autowire="default" or default-autowire="byName" (后面的是延迟加载,就不是了)default-lazy-init="true" -->
  5. <bean id="idCard" class="com.spring305.test.autowire.po.IdCard"></bean>
  6. <bean id="people" class="com.spring305.test.autowire.po.People" autowire="byName"></bean>
  7. <!--
  8. dependency-check="object" 这个在spring3中貌似没了
  9. 单个autowire
  10. <bean id="people" class="com.spring305.test.autowire.po.People" autowire="byName"></bean>
  11. <bean id="people" class="com.spring305.test.autowire.po.People" autowire="constructor"></bean>
  12. autowire-candidate="false" 不会自动注入到其它的bean中
  13. <bean id="idCard" class="com.spring305.test.autowire.po.IdCard" autowire-candidate="false"></bean>
  14. -->
<beans.... http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
     "   default-autowire-candidates="*idCard" >
     <!--  default-autowire-candidates="*ple*,*ard*" 配置了,但是没有感觉到作用,并没有限制相应的 -->
     <!--beans标签中加上:  default-autowire="default"  or default-autowire="byName"  (后面的是延迟加载,就不是了)default-lazy-init="true" -->
     
    <bean id="idCard" class="com.spring305.test.autowire.po.IdCard"></bean>
    <bean id="people" class="com.spring305.test.autowire.po.People" autowire="byName"></bean>
    
    <!--
     dependency-check="object"  这个在spring3中貌似没了
     
     单个autowire
    <bean id="people" class="com.spring305.test.autowire.po.People"  autowire="byName"></bean>
     
     <bean id="people" class="com.spring305.test.autowire.po.People"   autowire="constructor"></bean>
     
     autowire-candidate="false" 不会自动注入到其它的bean中
    <bean id="idCard" class="com.spring305.test.autowire.po.IdCard"  autowire-candidate="false"></bean>
     -->
测试:
Java代码 复制代码 收藏代码
  1. //@Test//xml
  2. public void AutoWireTestXML() {
  3. ApplicationContext context = new ClassPathXmlApplicationContext("testAutoWire.xml");
  4. People people = (People) context.getBean("people");
  5. IdCard idCard = people.getIdCard();
  6. // autowire="byName" 当people bean上没有加这个标签时,打印值为null,加后则打印出了对象
  7. System.out.println(idCard);
  8. }
	//@Test//xml
	public void AutoWireTestXML() {
		ApplicationContext context =  new ClassPathXmlApplicationContext("testAutoWire.xml");
		People people = (People) context.getBean("people");
		IdCard idCard = people.getIdCard();
		// autowire="byName" 当people bean上没有加这个标签时,打印值为null,加后则打印出了对象
		System.out.println(idCard);
	}
annotation测试:
com.spring305.test.autowire.po.IdCardAnnotation.java
Java代码 复制代码 收藏代码
  1. @Configuration
  2. public class IdCardAnnotation {
  3. private String cardNo;
  4. private String desc;
  5. 。。。。getter...setter
  6. }
@Configuration
public class IdCardAnnotation {
	private String cardNo;
	private String desc;
。。。。getter...setter
}
com.spring305.test.autowire.po.PeopleAnnotation.java
Java代码 复制代码 收藏代码
  1. @Configuration
  2. public class PeopleAnnotation {
  3. private int id;
  4. private String name;
  5. private IdCardAnnotation idCardAnnotation;
  6. @Autowired(required = false)
  7. //@Qualifier("idCardAnnotation")
  8. public void setIdCardAnnotation(@Qualifier("idCardAnnotation")IdCardAnnotation idCardAnnotation) {
  9. this.idCardAnnotation = idCardAnnotation;
  10. }
  11. getter.setter
  12. }
@Configuration
public class PeopleAnnotation {
	private int id;
	private String name;
	private IdCardAnnotation  idCardAnnotation;
	@Autowired(required = false)
	//@Qualifier("idCardAnnotation")
	public void setIdCardAnnotation(@Qualifier("idCardAnnotation")IdCardAnnotation idCardAnnotation) {
		this.idCardAnnotation = idCardAnnotation;
	}
getter.setter
}
测试:
Java代码
  1. @Test
  2. public void AutoWireTestAnnotation() {
  3. ApplicationContext context = new AnnotationConfigApplicationContext(IdCardAnnotation.class,PeopleAnnotation.class);
  4. PeopleAnnotation people = (PeopleAnnotation) context.getBean("peopleAnnotation");
  5. IdCardAnnotation idCard = people.getIdCardAnnotation();
  6. System.out.println(idCard);
  7. }

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring3之 bean AutoWi

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spring3之 bean AutoWi

Autowiring collaborators 自动装配Spring通过检查BeanFactory中的内容,来替指定其他被依赖的bean优点:1、显著减少配置的数量2、以使配置与java代码同步更新XML配置过程中可在标签中指
2023-01-31

Spring3属性之useDefault

今天从网上抄了个Spring MVC的demo. 发现Controller方法上采用@RequestMapping("/hello")作为Request与Controller的映射。但对于/hello.html居然也会走这个方法。不解,调查
2023-01-31

Spring装配Bean之XML如何安装配置bean

这篇文章给大家分享的是有关Spring装配Bean之XML如何安装配置bean的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。创建XML配置规范在使用XML配置前,需要创建一个新的配置规范,就像JavaConfig
2023-05-30

Spring之Bean标签怎么使用

今天小编给大家分享一下Spring之Bean标签怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Bean标签基本配置用
2023-07-02

Spring装配Bean之如何使用Java代码安装配置bean

这篇文章主要为大家展示了“Spring装配Bean之如何使用Java代码安装配置bean”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring装配Bean之如何使用Java代码安装配置bea
2023-05-30

spring之Bean的生命周期详解

Bean的生命周期:Bean的定义——Bean的初始化——Bean的使用——Bean的销毁Bean的定义Bean 是 spring 装配的组件模型,一切实体类都可以配置成一个 Bean ,进而就可以在任何其他的 Bean 中使用,一个 Be
2023-05-31

SpringBoot源码之Bean的生命周期

spring的bean的生命周期主要是创建bean的过程,一个bean的生命周期主要是4个步骤,实例化,属性注入,初始化,销毁,本文详细介绍了bean的生命周期,感兴趣的小伙伴可以参考阅读
2023-05-15

java JSP开发之Spring中Bean的使用

java JSP开发之Spring中Bean的使用在传统的Java应用中,bean的生命周期很简单。使用Java关键字new进行bean实例化,然后bean就可以被使用了,一旦该bean不再使用,Java就自动进行垃圾回收。然而,在Spri
2023-05-31

Java之Bean的生命周期实例分析

本篇内容主要讲解“Java之Bean的生命周期实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java之Bean的生命周期实例分析”吧!一、什么是生命周期首先理解下什么是生命周期?从创建到
2023-07-02

Spring核心之IOC与bean超详细讲解

IOC-InversionofControl,即控制反转。它不是什么技术,而是一种设计思想。这篇文章将为大家介绍一下Spring控制反转IOC的原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2022-11-13

SpringBoot源码之Bean的生命周期是什么

本文小编为大家详细介绍“SpringBoot源码之Bean的生命周期是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot源码之Bean的生命周期是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知
2023-07-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录