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. html5权威指南:表单元素

    一.表单标签: 表单标签:http://blog.csdn.net/mylovestart/article/details/8589002 html5新增表单元素: 1.datalist:http:/ ...

  2. mysql分页

    1.查询第一行记录: select * from table limit 1 2.查询第n行到第m行记录 select * from table1 limit n-1,m-n; SELECT * FR ...

  3. 【瞎搞搞之】 window_x64微信小程序环境搭建

    所需文件地址如下: http://pan.baidu.com/s/1nv0IHhn(ylk7)   1.下载微信开发工具0.7.0_x64 安装完成后,打开程序,进行微信扫码登录 2.下载微信开发工具 ...

  4. 老oj1965:polygon半平面交

    题目链接:http://192.168.2.240:8080/JudgeOnline/showproblem?problem_id=1965 polygon半平面交 Time Limit:1000MS ...

  5. queue STL

    //queue STL //queue is just a container adaptor, which is a class that use other container. //just l ...

  6. Qt_DX

    #ifndef MY_FRAME__HH__ #define MY_FRAME__HH__ #include <QtGui/QWidget> struct IDirect3D9; stru ...

  7. ActiveMQ in Action(1) - JMS

    关键字: activemq 1 JMS    在介绍ActiveMQ之前,首先简要介绍一下JMS规范.1.1 JMS的基本构件1.1.1 连接工厂    连接工厂是客户用来创建连接的对象,例如Acti ...

  8. Openjudge-计算概论(A)-求一元二次方程的根

    描述: 利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2 + bx + c =0的根 ...

  9. sync命令

    sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息. 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率.sync命令则 ...

  10. wcf 配置总结

    最近在配置WCF的时候,需要一点麻烦,避免以后才出现错误,特记录起来 1.wcf需要使用用户名和X509证书验证 A.服务器的config配置 a.bindings/binding中使用 <se ...