spring框架的组件结构图



IOC(Inversion of Control):反转控制,思想是反转资源获取方向,传统的资源查找方向是组件向容器发起请求资源查找,作为回应,容器适时的返回资源,IOC则相反,容器主动将资源推送给它所管理的组件,组件所要做的就是选择一种合适的方式接受资源。

DI(Dependency Injection):依赖注入,(IOC另一种表述)组件以一些预先定义的方式来自容器的资源注入。

spring用到的jar包

1、创建Bean

public class HelloSpring {
private String name; public void setName(String name) {
System.out.println("setname= " + name);
this.name = name;
} public void Hello() {
System.out.println("hello" + name);
} public HelloSpring() {
// TODO Auto-generated constructor stub
System.out.println("constructor start。。。。 ");
}

2、在根目录下创建New Spring Bean Definition file xml文件,通过属性方法注入

   <!-- 配置beans class :Bean的全类名,通过反射的方式在IOC容器中创建Bean,所以Bean中必须要有无参数的构造器 id:标识容器中的Bean,id唯一 -->
<bean id="helloSpring" class="com.test.HelloSpring">
<!-- property 的name属性和beans的set方法相对应 -->
<property name="name" value="spring"></property>
</bean>

3、使用构造方法注入,在constructor-arg元素里面声明属性值

3.1 新建User Bean

public class User {
private String name;
private int age;
private double money;
private String no; public User(String name, double money, String no) {
super();
this.name = name;
this.money = money;
this.no = no;
} public User(String name, int age, String no) {
super();
this.name = name;
this.age = age;
this.no = no;
} @Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", money=" + money
+ ", no=" + no + "]";
}
}

3.2 通过构造方法注入

//使用构造器注入属性值,可以指定参数的位置和参数的类型,以区分重载的构造器 index:位置 type:类型
<bean id="user1" class="com.test.User">
<constructor-arg value="aa" index="0"></constructor-arg>
<constructor-arg value="10" index="1" type="double"></constructor-arg>
<constructor-arg value="123456" index="2"></constructor-arg>
</bean> <bean id="user2" class="com.test.User">
<constructor-arg value="cc"></constructor-arg>
<constructor-arg value="10" type="int"></constructor-arg>
<constructor-arg value="78901" ></constructor-arg>
</bean>

4、创建spring IOC容器对象,并从IOC容器获取bean实例,然后调用Bean中的方法

  //ApplicationContext IOC容器
//ClassPathXmlApplicationContext:是ApplicationContext接口实现类,该实现从类路径下来加载配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); //利用id定位到IOC容器的bean
HelloSpring hello = (HelloSpring) ctx.getBean("helloSpring"); //利用类型获取,不推荐使用
//HelloSpring hello = ctx.getBean(HelloSpring.class); // 调用类的方法
hello.Hello(); User use = (User) ctx.getBean("user1");
System.out.println(use); use = (User) ctx.getBean("user2");
System.out.println(use);

5、运行效果

一月 17, 2017 10:38:52 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext.xml] constructor start。。。。
setname= spring
hellospring
User [name=aa, age=0, money=10.0, no=123456]
User [name=cc, age=10, money=0.0, no=78901]

此系列学习源码:传送门

spring学习-1的更多相关文章

  1. spring 学习之 bean 的注入方式 property和constructor-arg的使用方式

    spring 学习之 bean 的注入方式 property和constructor-arg的使用方式. bean的注入方式: property 注入是: 通过setxx方法注入. construct ...

  2. Spring学习之AOP总结帖

    AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对组件(比如类)进行开发,然后对组件进行组 ...

  3. Spring学习之第一个AOP程序

    IOC和AOP是Spring的两大基石,AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对 ...

  4. MyEclipse Spring 学习总结三 SpringMVC

    MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...

  5. Spring学习 Ioc篇(一 )

    一直以来忙于项目的开发,Spring虽然不用,一直想系统地学习一下,想看看它的源码,都没有时间,这段时间比较充裕,就索性先把Spring学习下,熟悉各个功能再去探究它内部的实现.就从Ioc篇开始学习. ...

  6. Spring学习(三)——Spring中的依赖注入的方式

    [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...

  7. Spring学习(二)——Spring中的AOP的初步理解[转]

      [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring. ...

  8. 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  9. Spring学习8-Spring事务管理

      http://blog.sina.com.cn/s/blog_7ffb8dd501014e0f.html   Spring学习8-Spring事务管理(注解式声明事务管理) 标签: spring注 ...

  10. Spring学习之Ioc控制反转(1)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

随机推荐

  1. 嵌入式开发之工具---比开发手册更重要的一个命令 man page

    man http://bbs.chinaunix.net/thread-826490-1-1.html http://read.pudn.com/downloads70/ebook/254107/ch ...

  2. xmlUtil 解析 创建

    http://yangzi09150915.blog.163.com/blog/static/32953487201072911410398/ package com.aibi.cmdc.webSer ...

  3. 由浅到深理解ROS(1)

    ROS机器人操作系统 ( Robot Operating System 或简称 ROS),可以帮助提高机器人软件的开发效率.ROS能够提供类似传统操作系统的诸多功能,如硬件抽象.底层设备控制.常用功能 ...

  4. Mac下python连接mysql数据库

    一.下载Mysql官方connector驱动 地址:https://dev.mysql.com/downloads/connector/python/ 根据提示安装.dmg文件即可. 二.验证是否安装 ...

  5. error items-9022:missing required icon file.the bundle does not contain an app icon for iPhone/iPad Touch of exactly '120x120' pixels,in.pen format for ios versions >= 7.0

    error items-9022:missing required icon file.the bundle does not contain an app icon for iPhone/iPad ...

  6. web安全之SQL注入--第一章 课程介绍

    课程介绍1.什么是SQL注入?2.如何寻找SQL注入漏洞?3.如何进行sql注入攻击?4.如何预防sql注入5.课程总结

  7. node.js实现国标GB28181设备接入的sip服务器解决方案

    方案背景 在介绍GB28181接入服务器的方案前,咱们先大概给大家介绍一下为什么我们选择了用nodejs开发国标GB28181的服务,我大概给很多人介绍过这个方案,大部分都为之虎躯一震,nodejs在 ...

  8. Hadoop DataNode 节点的动态添加和动态删除

    动态添加 DataNode 节点 hadoop环境是必须的 需要加入新的 DataNode 节点,前提是已经配置好 SSH 无密登录:直接复制已有DataNode中.ssh目录中的authorized ...

  9. 九度OJ 1189:还是约瑟夫环 (约瑟夫环)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:820 解决:522 题目描述: 生成一个长度为21的数组,依次存入1到21: 建立一个长度为21的单向链表,将上述数组中的数字依次存入链表每 ...

  10. nginx学习之简化安装篇(一)

    环境:CentOS 6.5 1. 安装依赖环境 [root@localhost ~]# yum install pcre-devel zlib-devel openssl-devel -y 2. 安装 ...