属性参考
如果在Bean定义文件中已经有一个定义的Bean实例,则可以直接让某个属性参考这个实例。
例如:
===================
ApplicationContext.xml
--------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!--以有定义的bean-->
<bean id="databean" class="java.util.Date"></bean>
<bean id="helloBean" class="only.HelloBean">
<constructor-arg index="0">
<value>Justin</value>
</constructor-arg>
<constructor-arg index="1">
<value>Hello</value>
</constructor-arg>
<property name="date">
<ref bean="databean"/> <!--date属性参考databean-->
<property>
</bean>
</beans>
要参考至定义文件中已定义的Bean实例,是使用<ref/>标签,并使用 "name” 属性来指定定义文件要参考的Bean别名。
如果某个Bean的实例只被某个属性参考一次,之后在定义文件中不再被其他Bean的属性所参考,那么也可以直接在属性定义时使用<bean>标签,并且需指定其”class“属性即可:
例如:
Bean定义文件
-------------------------------
.........
<property name="date">
<bean class="java.util.Date"/> <!--直接用Bean-->
</property>
.........
--------------------------------
自动绑定
除了在Bean定义文件中直接指定字符串值,使用<ref/>直接指定参考至其他的Bean实例,或是使用<bean>标签并指定“class”属性来指定依赖对象外,Spring也支持隐式的自动绑定。
可以透过类型(byType)或名称(byName)将某个Bean的实例帮定至其他Bean对应的属性。
实例:
Bean定义文件
----------------------------------------
............
<bean id="databean" class="java.util.Date"></bean>
<bean id="helloBean" class="only.HelloBean" autowire="byType">
<constructor-arg index="0">
<value>Justin</value>
</constructor-arg>
<constructor-arg index="1">
<value>Hello</value>
</constructor-arg>
</bean>
............
----------------------------------------
里面并没有指定date属性,而是透过自动帮定,在“autowire”属性上指定的“byType”,所以会根据bean的setDate()方法所接受的类型,来判断Bean定义文件中是否定义有类似的类型对象,并将之设个setDate().
使用自动帮定时,如果“byType”无法完成帮定,则抛出org.springframework.beans.factory.Unsatisfied-DependencyException异常。
使用"byName" 来帮定,则会根据Bean定义时的“id”属性上指定的别名与Setter名称是否一致来进行自动帮定。
实例:
Bean定义文件
----------------------------------------
............
<bean id="date" class="java.util.Date"></bean>
<bean id="helloBean" class="only.HelloBean" autowire="byName">
<constructor-arg index="0">
<value>Justin</value>
</constructor-arg>
<constructor-arg index="1">
<value>Hello</value>
</constructor-arg>
</bean>
..............
-----------------------------------------
如果使用"byName"无法完成自动帮定,则对应的Setter仅维持未帮定状态。
也可以在构造方法上进行自动帮定。
实例:
Bean定义文件
---------------------------------
..............
<bean id="date" class="java.util.Date"></bean>
<bean id="helloBean" class="only.HelloBean" autowire="constructor">
<constructor-arg index="0">
<value>Justin</value>
</constructor-arg>
<constructor-arg index="1">
<value>Hello</value>
</constructor-arg>
</bean>
..............
---------------------------------
由于"autowire"设定为"constructor",在建立依赖关系时,容器会试图比对Bean实例类型,及相关的构造方法上的参数类型,如果符合则选用构造方法来建立Bean的实例。
如果无法完成帮定则抛出:org.springframework.beans.factory.UnsatisfiedDependencyException异常。
还可以将"autowire"设定为"autodetect",一切交给Spring来判断有什么方式进行帮定。
当"autowire"被设定为"autodetect"时,Spring会先尝试构造方法(“constructor”)来处理依赖关系的建立,如果没有完成依赖关系建立,则再尝试使用如"byType"的方式来建立依赖关系。
依赖检查
在隐式自动绑定中,由于没办法从定义文件中,清楚地看到是否每个属性都完成设定,为了确保某些依赖关系确实建立,可以加入以来检查,在<bean>标签使用时设定“dependecy-check”,
可以有4种依赖检查方式:"simple","objects","all","none".
- "simple":只检查简单的属性是否完成依赖关系,像是原生(primitive)数据类型或字符串对象。
- "objects":设定则检查对象类型的属性是否完成依赖关系。
- "all":检查全部的属性是否完成依赖关系。
- "none":默认值,表示不检查依赖性。
实例:
Bean定义文件
---------------------------------------
..........
<bean id="date" class="java.util.Date"></bean>
<bean id="helloBean" class="only.HelloBean" autowire="constructor" dependency-check="all">
<constructor-arg index="0">
<value>Justin</value>
</constructor-arg>
<constructor-arg index="1">
<value>Hello</value>
</constructor-arg>
</bean>
..........
---------------------------------------
分享到:
相关推荐
spring-core:核心模块 依赖注入IOC和DI的最基本实现 spring-beans:Bean工厂与装配 spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 spring-context-indexer:类管理组件和...
Java-Spring-SpringIoC容器-SpringIoC的学习 SpringIoC容器的学习笔记 主要介绍了IoC容器工作原理以及如何配置IoC容器 通过<bean>标签和注解配置容器
spring-**core**-4.3.6.RELEASE.jar :包含spring框架基本的核心工具类,spring其他组件都要用到这个包里的类,其他组件的基本核心 spring-**beans**-4.3.6.RELEASE.jar:所有应用都要用到的jar包,它包含访问配置...
spring-beans-5.1.8.RELEASE.jar //配置、创建、管理Bean,负责Ioc、DI spring-context-5.1.8.RELEASE.jar //提供在基础IoC上的扩展服务 spring-expression-5.1.8.RELEASE.jar //提供对Spring表达式语言的支持
Spring是什么呢?首先它是一个开源的项目,而且目前非常活跃...它实现了很优雅的MVC,对不同的数据访问技术提供了统一的接口,采用IOC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transaction Management
spring容易对于bean的配置,以及spring ioc技术的实现的讲解!
4) spring-beans-3.2.8.RELEASE.jar SpringIoC(依赖注入)的基础实现 5) spring-context-3.2.8.RELEASE.jar Spring提供在基础IoC功能上的扩展服务 6) spring-core-3.2.8.RELEASE.jar Spring的核心包 7) ...
本篇文章主要介绍了详解Spring框架---IOC装配Bean,提供了三种方式实例化Bean,具有一定的参考价值,有兴趣的可以了解一下。
spring-beans-4.0.0.RELEASE.jar这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI...
spring IoC, 使用配置文件方式配置Bean的实例化和依赖注入
这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行 Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC /DI支持,引入spring-core.jar及...
撸一撸Spring Framework-IoC-BeanDefinition(csdn)————程序
spring基于xml配置加载bean 的demo 了解spring的反射机制
Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多层JavaEE系统的框架,它的主要目地是简化企业开发 Spring以一种非侵入式的方式来管理你的代码, Spring提倡”最少侵入”,这也就意味着你可以适当的时候...
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。... 1、核心容器 2、Spring 上下文 3、Spring AOP 4、Spring DAO 5、Spring ORM 6、Spring Web 模块 7、Spring MVC 框架
配置文件 创建和管理bean。 4.spring-context-4.1.1.RELEASE.jar 在基础IOC功能上提供扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的...
Spring IOC Bean标签属性介绍 0.Bean标签属性介绍 1.0 新建一个Maven工程 1.1 pom.xml 1.2 实体类JavaBean 1.2.1 User类 1.3 当Scope="singleton"时 1.4 当 Scope="singleton" 且 lazy-init="true" 时 1.5 当scope=...
Spring简单介绍,AOP IOC Bean 常用注解
它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制...
Spring IoC容器基础作业 作业描述 阅读以下问题描述,按要求实现。 问题1 分支:p1-从这里开始 主观题:@Component已经可以支持声明一个bean了,为什么还要再弄个@Bean出来? 问题2 分支:p2-从这里开始 ...