`
esffor
  • 浏览: 1352032 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring的自动装配机制

阅读更多

Spring提供一种自动装配,功能,就是不再使用ref进行手工装配bean,这种方式可以减少配置文件的代码量,但是,在大型项目中,不推荐使用,容易混乱,Spring提供byName,byType,constructor,autpdetect四种自动装备方式:

定义接口:

 

package Bean.autowire;

public interface Dog ...{
  
public void chop();
}



package Bean.autowire;

public interface Person ...{
   
public void useDog();
}

 定义实现类:

package Bean.autowire;

public class Gundog implements Dog ...{
    
private String name;
    
public String getName() ...{
        
return name;
    }

    
public void setName(String name) ...{
        
this.name = name;
    }

    
public void chop() ...{
        System.out.println(name);

    }


}



package Bean.autowire;



import Bean.autowire.Person;

public class Chinese implements Person ...{
   
public void useDog() ...{
        gundog.chop();
        
    }

   
   
public Chinese(Dog dog)...{
       
this.setGundog(dog);
   }


private Dog gundog;

public Dog getGundog() ...{
    
return gundog;
}


public void setGundog(Dog gundog) ...{
    
this.gundog = gundog;
}

}


配置文件:

byName方式,必须在实现类Chinese中有一个setter方法,必须是set+bean名,首字母大写,如:

public void setGundog(Dog gundog) {
 this.gundog = gundog;
}

byType方式,必须有setter方法,要求setter方法的参数类型与容易bean的类型相同,如:

public void setDog(Dog dog) {
 this.dog = dog;
}

constructor方式,必须有何bean类型复合,数量复合的构造函数,如:

   public Chinese(Dog dog){
    this.setGundog(dog);
   }

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

 
  
  
<!-- byname 
  <bean id="chinese" class="Bean.autowire.Chinese" autowire="byName"></bean> 
  <bean id="gundog" class="Bean.autowire.Gundog">
    <property name="name">
      <value>byname</value>
    </property>
  </bean>
  
-->
  
<!-- bytype
  <bean id="chinese" class="Bean.autowire.Chinese" autowire="byType"></bean> 
  <bean id="gundog" class="Bean.autowire.Gundog">
     <property name="name">
      <value>bytype</value>
    </property>
  </bean>
  
-->
  
<!-- byconstructor
    <bean id="chinese" class="Bean.autowire.Chinese" autowire="constructor"></bean>   
   <bean id="dog" class="Bean.autowire.Gundog">
     <property name="name">
      <value>byconstructor</value>
    </property>
  </bean>
   
-->
</beans>


测试代码:

 

public static void main(String[] args) throws Exception ...{
        
        String path
=new Test().getClass().getResource("/").getPath();
        String realpath
=path.substring(1, path.length());
        ApplicationContext context
=new FileSystemXmlApplicationContext(realpath+"/autowire.xml");
        
        
        Person person1
=(Person)context.getBean("chinese");
        person1.useDog();
       
       
    }


运行结果:

可以分别打印注入bean的属性,byname,bytype.constructor

autodetect是自动根据bean的内部结构选择constructor或者byType



分享到:
评论

相关推荐

    Java注解机制之Spring自动装配实现原理详解

    主要为大家详细介绍了Java注解机制之Spring自动装配实现原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    深度剖析Spring Boot自动装配机制实现原理(csdn)————程序.pdf

    深度剖析Spring Boot自动装配机制实现原理(csdn)————程序

    SpringBoot的自动装配原理主要基于Spring框架的自动装配机制进行扩展.txt

    springboot

    SpringBoot 打成jar包供第三方引用自动装配方案实现

    SpringBoot 打成jar包供第三方引用自动装配方案实现 每天多学一点点~ 话不多说,这就开始吧… ...虽然知道目前水平有限,先试试普通的jar包如何与spring自动装配吧~ 环境 jdk1.8 springboot 2.1.12.RELEASE 2.使用者手

    springboot2-spring5-studying:Springboot2,Spring源码学习项目,涉及SpringBoot2自动装配实现机制,Spring AOP动态代理以及IOC各种扩展接口的实现方式

    Spring AOP多种代理机制相关核心类介绍先介绍一些Spring Aop中一些核心类,大致分为三类: advisorCreator ,从spring ioc的扩展接口beanPostProcessor继承,主要用作扫描获取advisor。 advisor :顾问的意思,封装...

    高级开发spring面试题和答案.pdf

    SpringBoot自动装配的过程的原理: spring的缓存; spring是如何解决的循环依赖; BeanFactory和FactoryBean有什么区别; Spring中用到的设计模式; SPI 机制(Java SPI 实际上是“基于接口的编程+策略模式+配置...

    spring接管JUnit

    接管JUnit资源是指Spring框架为了方便进行单元测试,在测试类中提供了自动装配和依赖注入的功能,使得测试类能够轻松地使用Spring容器中的Bean和依赖。这样,我们可以在测试类中使用Spring的依赖注入机制来注入所需...

    Spring.3.x企业应用开发实战(完整版).part2

    4.10.3 自动装配Bean 4.10.4 Bean作用范围及生命过程方法 4.11 基于Java类的配置 4.11.1 使用Java类提供Bean定义信息 4.11.2 使用基于Java类的配置信息启动Spring容器 4.12 不同配置方式比较 4.13 小结 第5章 Spring...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.6. 自动装配(autowire)协作者 3.3.6.1. 设置Bean使自动装配失效 3.3.7. 依赖检查 3.3.8. 方法注入 3.3.8.1. Lookup方法注入 3.3.8.2. 自定义方法的替代方案 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. ...

    让spring解决控制springboot中bean的加载顺序的问题.docx

    在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功能。 在一般业务场景,可能你不大关心一个bean是如何被注册进spring容器的。只需要把需要注册进容器的bean声明为@Component即可,...

    Spring 2.0 开发参考手册

    3.3.6. 自动装配(autowire)协作者 3.3.7. 依赖检查 3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. 其他作用域 3.4.4. 自定义作用域 3.5. 定制bean特性 3.5.1...

    Spring中文帮助文档

    3.3.5. 自动装配(autowire)协作者 3.3.6. 依赖检查 3.3.7. 方法注入 3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. Singleton beans和prototype-bean的依赖 3.4.4. 其他作用域 ...

    Spring API

    3.3.5. 自动装配(autowire)协作者 3.3.6. 依赖检查 3.3.7. 方法注入 3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. Singleton beans和prototype-bean的依赖 3.4.4. 其他作用域 ...

    spring chm文档

    3.3.6. 自动装配(autowire)协作者 3.3.7. 依赖检查 3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. 其他作用域 3.4.4. 自定义作用域 3.5. 定制bean特性 3.5.1...

    Spring 3 Reference中文

    4.4.5.1 自动装配的限制和缺点.. 56 4.4.5.2 从自动装配中排除bean. 57 4.4.6 方法注入. 57 4.4.6.1 查找方法注入.. 58 4.4.6.2 任意方法的替代 59 4.5 Bean 的范围. 60 4.5.1 单例...

    Spring3.x企业应用开发实战(完整版) part1

    4.10.3 自动装配Bean 4.10.4 Bean作用范围及生命过程方法 4.11 基于Java类的配置 4.11.1 使用Java类提供Bean定义信息 4.11.2 使用基于Java类的配置信息启动Spring容器 4.12 不同配置方式比较 4.13 小结 第5章 Spring...

    spring 个人笔记

    //* 以下for循环是实现模拟spring自动装配(注入)功能 //一开始列出此bean的所有property子元素 for (Element propertyElement : (List)element.getChildren("property")){ //获取property子元素中 属性为...

    spring基础

    Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 @Autowired 按照类型来装配 改变如下: package com.baobaotao; import org.springframework.beans....

    spring3.1中文参考文档

    spring3.1中文参考文档,南磊翻译,现在有4章,目录如下: 第一部分 Spring framework概述.......................................................................................................................

Global site tag (gtag.js) - Google Analytics