ByeService.java

package com.service;
public class ByeService {
    public String sayBye() {
        return "byebye";    }
}
 

UserService.java

package com.service;
public class UserService {
    private String name;    private ByeService byeService;
    public String getName() {
        return name;    }

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

    public void setByeService(ByeService byeService) {
        this.byeService = byeService;    }

    public ByeService getByeService() {
        return byeService;    }

    public void sayHello() {
        System.out.println("hello " + name + " " +  byeService.sayBye());    }
}

applicationContext.xml

<bean id="userService" class="com.service.UserService" >      <property name="name" value="balfish"  />      <property name="byeService" ref="byeService" /></bean>
<bean id="byeService" class="com.service.ByeService"></bean>
 

运行结果:hello balfish byebye

 
 
 
 原理分析:
当执行  ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");时,
spring容器对象被创 建,同时applicationContext.xml 中配置bean  bean就会被创建(内存【HashMap/HashTable】)
 
xml的bean,property等被的配置被反射如下,,,,
内存(applicationContext对象引用)
id                                                                 对象
userService (0x1111)                            UserService【name, byeService(?-->0x2222)】
byeService  (0x2222)                          ByeService
 
 
自己实现这个反射:dom4j + java 反射
userService = Class.forName("com.service.UserService");        //所以class是类的全路径 
userService.setName("balfish");  // 反射要调用setter,必须写,且写正确
 
byeService = Class.forName("com.service.BybService"); 
 
userService.setByeService(byeService);   //这步可以延迟一下
HashMap applicationContext = new HashMap();
applicationContext.put("userService",userService);
applicationContext.put("byeService",byeService);
 
 
 
 
ioc,DI
ioc控制反转,就是把创建对象,维护对象的关系的权利从程序中转移到spring的容器(applicationContext.xml) ,而程序本身不再维护
DI依赖注入,实际上和ioc是同一个概念,spring设计者人为DI更准确地表示spring核心技术
 
编程粒度变大->
指令(汇编)       语句(c)         对象(java)             组件(spring)
 

spring bean之间关系的更多相关文章

  1. Spring Bean之间的关系

    bean之间的关系:继承和依赖继承bean的配置 Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父bean的bean称为子bean 子bean从父bean中继承配置,包括 ...

  2. spring bean之间的关系:继承,依赖,注入

    一 继承 spring中多个bean之间的继承关系,和面向对象中的继承关系类似,直接看代码. 先定义一个Person类 package com.demo.spring.entity; /** * @a ...

  3. Spring基础10——Bean之间关系

    1.前言 不同的Bean之间存在两种关系:继承和依赖,这里的继承与java中的继承不同,它指的是配置上的继承. 2.继承bean配置 Spring允许继承bean的配置,被继承的bean成为父bean ...

  4. Spring -- Bean自己主动装配&amp;Bean之间关系&amp;Bean的作用域

    对于学习spring有帮助的站点:http://jinnianshilongnian.iteye.com/blog/1482071 Bean的自己主动装配 Spring IOC 容器能够自己主动装配 ...

  5. spring bean之间的关系:继承;依赖

    概要: ' 继承Bean配置 Spring同意继承bean的配置,被继承的bean称为父bean,继承这个父Bean的Bean称为子Bean 子Bean从父Bean中继承配置,包含Bean的属性配置 ...

  6. spring—Bean配置

    Spring是一个开源的框架,其目标是简化java的开发.为了降低Java开发的复杂性,Spring有如下的特性: >> 基于POJO的轻量级和最小侵入性编程 >> 通过依赖注 ...

  7. 在Spring Bean实例过程中,如何使用反射和递归处理的Bean属性填充?

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! <Spring 手撸专栏>目录 [x] 第 1 章:开篇介绍,我要带你撸 Spri ...

  8. [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. Spring基础——在 IOC 容器中 Bean 之间的关系

    一.在 Spring IOC 容器中 Bean 之间存在继承和依赖关系. 需要注意的是,这个继承和依赖指的是 bean 的配置之间的关系,而不是指实际意义上类与类之间的继承与依赖,它们不是一个概念. ...

随机推荐

  1. 1、JavaScript基础

    1.思维导图 2.创建html页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  2. 1、Eclipse的安装

    下载地址:http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/indigosr1 2.java jdk 的 ...

  3. Java8 (1)

    参考资料: <Java8 in Action> Raoul-Gabriel Urma 一.jdk8 客观的说,Java8是一次有重大演进的版本,甚至很多人认为java8所做的改变,在许多方 ...

  4. .Net Core Session验证码

    1.验证码帮助类 namespace IdeaCore.Services.Common { public class ValidateCodeService : IValidateCodeServic ...

  5. Activity间切换的动画应用

    Activity切换过程中,系统会使用一些默认的动画,显得切换过程不至于太呆板. 在frameworks/base/core/res/res/values下的stlyes.xml文件中有具体的定义各个 ...

  6. ubuntu切换到超级管理员权限

    默认情况下是无法切换的,需要给root用户设置上密码 mars@mars-LIFEBOOK-LH531:~$ sudo passwd root[sudo] password for mars: 输入新 ...

  7. Meta标签中的属性及含义

    一.Meta标签中的format-detection属性及含义 format-detection翻译成中文的意思是“格式检测”,顾名思义,它是用来检测html里的一些格式的,那关于meta的forma ...

  8. Linux RCU机制详解

    关于rcu的几点声明: 1:RCU使用在读者多而写者少的情况.RCU和读写锁相似.但RCU的读者占锁没有任何的系统开销.写者与写写者之间必须要保持同步,且写者必须要等它之前的读者全部都退出之后才能释放 ...

  9. Oracle Day04 子查询

    1.子查询解决什么问题: 当一个简单的查询查询不到结果的时候,可以使用子查询来丰富查询的条件以达到显示结果的目的. 子查询的格式: 用一个小括号包含,然后在里面写sql语句2.子查询的注意事项: 1) ...

  10. Ubuntu编译安装PHP7

    参数配置 ./configure --prefix=/usr/local/php7 \ --with-config-file-path=/usr/local/php7/etc \ --with-apx ...