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. 《JS权威指南学习总结--6.6属性getter和setter》

    内容要点: 一.对象属性     对象属性是由名字.值和一组特性构成的.在ES5中,属性值可以用一个或两个方法替代,这两个方法就是getter和setter.由getter和setter定义的属性称做 ...

  2. C socket指南

    1.介绍 Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措? ...

  3. Java 工具 JUnit单元测试

    Java 工具 JUnit单元测试 @author ixenos 1.1.   JUnit单元测试框架的基本使用 一.搭建环境: 导入junit.jar包(junit4) 二.写测试类: 0,一般一个 ...

  4. LNK2019解决思路

    虽然官网给出了很多可能的原因,最可能的原因还是因为缺少某个库文件.最近解决的一个为例总结一下思路 Winmm.lib; ad_win32.obj : error LNK2019: unresolved ...

  5. CodeForces 701C They Are Everywhere 尺取法

    简单的尺取法…… 先找到右边界 然后在已经有了所有字母后减小左边界…… 不断优化最短区间就好了~ #include<stdio.h> #include<string.h> #d ...

  6. 亲身体验:digitalocean vps能做的10件事

    我写过一篇亲身体验:digitalocean和linode评测哪个好,帮助不少网友选购价格便宜性能优异的免备案vps,相信大家对两家产品有所了解.vps的性能和用途远远超过传统的虚拟主机,你拥有独立I ...

  7. 第二次冲刺spring会议(第一次会议)

    [例会时间]2014/5/4  21:15 [例会地点]9#446 [例会形式]轮流发言 [例会主持]马翔 [例会记录]兰梦 小组成员:兰梦 ,马翔,李金吉,赵天,胡佳奇 内部测试版发布时间5月11日 ...

  8. 洛谷-语文成绩-[有奖]洛谷5月月赛:kkksc03的三大神器

    题目背景 Background语文考试结束了,成绩还是一如既往地有问题. 题目描述 Description语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行.她总是要一遍遍地给某些同学增加分数 ...

  9. MMS model

  10. 【codevs】1860 最大数

    1860 最大数     题目描述 Description 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 输入描述 Input Description 第一行一个正整数n. ...