`
Scliu123
  • 浏览: 41403 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Spring核心技术----IoC的Bean基本管理3

阅读更多

属性参考

  如果在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>

..........

---------------------------------------

分享到:
评论

相关推荐

    springIOC核心组件分析.vsdx

    spring-core:核心模块 依赖注入IOC和DI的最基本实现 spring-beans:Bean工厂与装配 spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 spring-context-indexer:类管理组件和...

    Spring-ioc-jar

    这个jar文件"Spring-ioc-jar"包含了实现Spring IOC功能所需的关键类和接口,是学习和使用Spring IOC技术的基础。 Spring框架的IOC容器是其核心组件,主要由`ApplicationContext`和`BeanFactory`两个接口代表。`...

    Spring框架(spring-framework-5.2.6.RELEASE)的jar包

    - `spring-core-5.2.6.RELEASE.jar`:Spring的核心工具集,包括IoC和基本的AOP支持。 - `spring-expression-5.2.6.RELEASE.jar`:Spring表达式语言(SpEL),用于在运行时查询和操作对象图。 - `spring-jdbc-5.2.6....

    spring-security-web源码所需jar包

    2. **spring-beans-3.1.2.RELEASE.jar**:包含Spring处理bean定义和依赖注入的核心类,使得Spring Security可以动态地管理其组件。 3. **spring-web-3.1.2.RELEASE.jar**:提供了处理HTTP请求和响应的能力,以及...

    spring-framework-master

    1. **核心容器**:包括Core Container和Beans模块,定义了Spring的基本部分,如Bean工厂、ApplicationContext和依赖注入功能。Bean工厂是Spring的基石,它负责创建、管理和配置对象。 2. **数据访问/集成**:如JDBC...

    spring-context-3.2.0 spring-core-3.2.0 等齐全的Spring jar包

    1. **spring-core-3.2.0.RELEASE.jar**:这是Spring框架的核心模块,提供了基本的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)功能,以及资源加载和通用工具类。 2. **spring-...

    spring-aop-5.1.0.RELEASE.jar

    spring-**core**-4.3.6.RELEASE.jar :包含spring框架基本的核心工具类,spring其他组件都要用到这个包里的类,其他组件的基本核心 spring-**beans**-4.3.6.RELEASE.jar:所有应用都要用到的jar包,它包含访问配置...

    spring-framework-1.0-m2.zip

    首先,IoC容器是Spring的核心,它负责管理对象的生命周期和依赖关系。在1.0-m2中,IoC容器通过XML配置文件来定义对象的实例化和它们之间的依赖关系,这使得程序的耦合度降低,更易于测试和维护。例如,开发者可以...

    spring-framework-5.1.2.RELEASE.rar

    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-framework-5.3.1.RELEASE.zip

    3. **spring-context**: 扩展了IoC容器,引入了上下文概念,提供了对国际化、事件、资源、缓存等支持。 4. **spring-aop**: 实现了面向切面编程(AOP),允许定义方法拦截器和切面,用于实现如日志、事务管理等功能。...

    官方完整包 spring-framework-5.3.7.RELEASE-dist.zip

    - **Bean容器**:是Spring的核心,负责管理对象的生命周期和依赖关系,通过XML或注解实现bean的配置。 - **AOP**:提供面向切面编程,允许开发者定义方法拦截器和切点,实现代码的解耦和模块化。 3. **模块详解**...

    spring-framework-reference-4.3.19.pdf

    控制反转(IoC)容器负责管理对象的生命周期和配置,从而实现了依赖注入。 - **框架模块**: - **核心容器**:包括Beans、Core、Context等模块,提供核心功能,如BeanFactory、ApplicationContext等。 - **AOP与...

    Spring_IOC-v(上)笔记

    Spring_IOC-v(上)笔记是关于 Spring 框架中的 IoC(控制反转)技术的笔记,主要介绍了 IoC 的概念、依赖注入、Bean 的设置、Spring 组件的管理等知识点。 IoC 技术是 Spring 框架的核心概念之一,它的主要思想...

    spring技术--IOC控制反转课件.ppt

    其中,IOC(Inversion of Control,控制反转)是Spring的核心特性之一,它改变了传统对象创建和管理的方式,实现了依赖注入(Dependency Injection)。本课件主要介绍了Spring中的IOC原理、特点以及如何使用。 ### ...

    官方原版源码spring-framework-5.1.4.RELEASE.zip

    例如,关于IoC(Inversion of Control,控制反转)的实现,Spring使用了XML配置或注解来定义bean的依赖关系,通过反射机制动态加载和管理bean。另外,AOP模块实现了切面编程,允许我们定义横切关注点,如日志、事务...

    Java-Spring-SpringIoC容器-SpringIoC的学习

    在Java Spring框架中,Spring IoC(Inversion of Control,控制反转)是核心特性之一,它使得应用程序的组件之间的依赖关系不再由代码直接管理,而是交由Spring IoC容器负责。这种设计模式降低了代码间的耦合,提高...

    Spring----IOC实现

    Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)为核心,极大地简化了软件组件的管理。在这个名为“Spring---IOC实现”的项目中,我们将深入探讨Spring如何通过IoC实现对应用...

    struts2-spring-plugin-2.2.1.jar

    Spring框架的核心是IoC(Inversion of Control)容器,它负责管理对象的生命周期和对象间的依赖关系。 **Struts2与Spring的集成** 在没有Struts2-Spring-Plugin的情况下,要在Struts2应用中使用Spring,需要手动...

    spring-modules-0.9.zip

    在0.9版本中,Spring Modules可能已经包含了对Spring核心的扩展,比如AOP(面向切面编程)的增强,提供了一些预定义的切面,便于处理常见的企业级问题,如日志记录、事务管理等。同时,它可能还提供了对Spring IoC...

    spring4--1.入门及ioc

    Java配置类则是Spring3引入的新特性,它允许我们用更加面向对象的方式来定义Bean。例如: ```java @Configuration public class AppConfig { @Bean public ExampleBean exampleBean() { return new ExampleBean...

Global site tag (gtag.js) - Google Analytics