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. iOS开发加快审核app

    实现app加快审核的步骤: 1.https://developer.apple.com/contact/进入这个网址点击App Store下的Expediting an App Review进入这个页 ...

  2. 部署WEB应用的三种方式[转]

    一.基本部署 Tomcat安装目录下有一个webapps目录,该目录存放所有的WEB应用程序,Tomcat会自动管理该目录下的所有WEB应用.因此,最简单的部署方式就是将要部署的WEB应用直接拷贝到T ...

  3. nodejs url方法

    ulrl方法 url.format(urlObj)   //将对象装换成url url.parse(urlStr[, parseQueryString][, slashesDenoteHost]) / ...

  4. 使用JavaScript进行数组去重——一种高效的算法

    最近比较忙,没时间更新博客,等忙完这阵子会整理一篇使用AngularJS构建一个中型的单页面应用(SPA)的文章,尽情期待!先占个坑. 数组去重的算法有很多种,以下是一种. 思路如下: 定义一个空的对 ...

  5. vs2013+opencv2.4.11+Qt5.5.1配置

    注意本教程配置环境:win7 32位 如果只配置vs2013+opencv2.4.11,参考http://jingyan.baidu.com/article/ff411625b1311a12e4823 ...

  6. C# 验证码生成(MVC和非MVC两种方式)

    /// <summary> /// 生成验证码 /// </summary> /// <param name="length">指定验证码的长度 ...

  7. 关于ios 程序加载百度地图lib,出现链接错误:找不到符号 (null): _OBJC_CLASS_$_BMKMapManager的解决办法

    报告的错误信息 ld: warning: ignoring file /Users/5012/Documents/sphuang/IOS_project/baidu_map/ShareLocation ...

  8. 第1章 初识java----Java简介

    1.Java最初的名字是OAK,是咖啡的意思,在1995年被重命名为Java. ●Java编程语言,即语法. ●Java文件格式,即各种文件夹.文件的后缀. ●Java虚拟机(JVM),即处理*.cl ...

  9. 查询全国的省市信息<option>拼接

    //修改页面获取省市信息 function getProvinceUSER_AREA1(){ $.ajax({ type:'post', url:'<%=path%>/user/findU ...

  10. SEO优化技巧总结

    SEO优化技巧总结 一:了解搜索引擎 基础知识 搜索引擎:由蜘蛛程序沿着链接爬行和抓取网上的大量页面,存进数据库,经过预处理,用户在搜索框 输入关键词后,搜索引擎排序从数据库中挑选出符合搜索关键词要求 ...