IoC

1、Inverse of Control ,控制反转(控制权的翻转)

2、控制:对对象的创建、对对象的属性赋值等一系列操作本来应该是我们做的事情

Java Application :

Date birthdate = new Date();
Student s = new Student();
s.setId( 1001 );
s.setName( "张三丰" );
s.setGender( '男' ) ;
s.setBirthdate( birthdate )

类似于自己在家吃饭得自己动手做

3、反转:

  • 将对对象的创建、为属性赋值等操作的权限反转给容器,通常我们将控制权反转给Ioc container(ioc 容器)
  • Java程序中自主控制权限,包括创建对象,设置对象的值。逆转交给容器来做,做之前交给容器来做,文件名和路径没有要求

spring 容器 读取配置文件生产相应的对象, Configuration Metadata ( "配置元数据" ) 用来 "告诉" Spring IoC 容器怎么产生对象,你的业务对象如果我们依赖于另一个对象,需要拿过来的时候,那个对象就是你的业务对象。类似去外面吃饭,spring容器相当于一个厨房,配置元数据相当于普通的材料,你的业务对象相当于特殊要求,例如加辣椒,由”厨房”做好之后直接吃就好了。

Spring Bean Configuration File :

<bean id="d" class="java.util.Date" />
<bean id="s" class="io.spring.ioc.base.Student" >
<property name="id" value="1001" />
<property name="name" value="张三丰" />
<property name="gender" value="男" />
<property name="birthdate" ref="d" />
</bean>

id为d的bean就是你的业务对象

Spring IoC Container :

//指定configuration metadata配置元数据
String configLocations = "classpath:ecut/**/base/ioc.xml" ;
//创建spring IOC容器,在容器创建的时候调用无参构造
AbstractApplicationContext container = new ClassPathXmlApplicationContext( configLocations );
//ready for use (此时可以从指定的IOC容器中获取指定名称的bean实例了)
Student s = container.getBean( "s" , Student.class );
//从容器中获取的bean实例中获取属性值
System.out.println( s.getId() );

BeanFactory就表示一个ioc容器,XmlBeanFactory是BeanFactory的实现类。     
ApplicationContext是BeanFactory的子接口,ClassPathXmlApplicationContext是ApplicationContext的实现类。
WebApplicationContext是ApplicationContext的子接口,XmlWebApplicationContext是WebApplicationContext的实现类。

4、测试案例

Student类

package ecut.ioc.base;

import java.util.Date;

public class Student {

    private Integer id;
private String name;
private char gender;
private Date birthdate; public Student() {
super();
System.out.println( "调用 Student 无参构造创建对象" );
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
System.out.println( "为id属性赋值: " + id );
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public char getGender() {
return gender;
} public void setGender(char gender) {
this.gender = gender;
} public Date getBirthdate() {
return birthdate;
} public void setBirthdate(Date birthdate) {
this.birthdate = birthdate;
System.out.println( "为birthdate属性赋值: " + birthdate );
} }

ioc.xml(Spring Bean Configuration File)名称不一定需要交applicationContext.xml,可以安装spring插件方便生成配置文件

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> <bean id="d" class="java.util.Date" /> <bean id="s" class="ecut.ioc.base.Student">
<property name="id" value="1001" />
<property name="name" value="张三丰" />
<property name="gender" value="男" />
<property name="birthdate" ref="d" />
</bean> <!-- <bean id="s" class="io.spring.ioc.base.Student">
<property name="id" value="1001" />
<property name="name" value="张三丰" />
<property name="gender" value="男" />
<property name="birthdate" >
<bean class="java.util.Date" />
</property>
</bean>--> </beans>

测试类

package ecut.ioc.base;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestSpringContainer { public static void main(String[] args) {
//指定configuration metadata配置元数据
String configLocations = "classpath:ecut/**/base/ioc.xml" ;
//创建spring IOC容器,在容器创建的时候调用无参构造
AbstractApplicationContext container = new ClassPathXmlApplicationContext( configLocations );
//ready for use (此时可以从指定的IOC容器中获取指定名称的bean实例了)
Student s = container.getBean( "s" , Student.class );
//从容器中获取的bean实例中获取属性值
System.out.println( s.getId() ); System.out.println( s.getName() ); System.out.println( s.getGender() ); System.out.println( s.getBirthdate() );
//关闭spring的IOC容器
container.close(); } }

classpath是指当前工程下bin目录,/**/指多级目录

转载请于明显处标明出处

https://www.cnblogs.com/AmyZheng/p/9249411.html

Spring学习(二)的更多相关文章

  1. spring学习(二) ———— AOP之AspectJ框架的使用

    前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...

  2. spring学习二:jdbc相关回顾以及spring下dao

    目录: Part一:回顾java web部分的jdbc.事务.连接池和dbutils工具等 : Part二:spring的JdbcTemplate使用: Part三:spring的事务处理: Part ...

  3. Spring学习二

    Spring的表达式语言 SpEL,使用方法是#{} SpEL的特性如下 使用Bean 的ID 来引用Bean : 调用方法和访问对象的属性: 对值进行算术.关系和逻辑运算: 正则表达式匹配: 集合操 ...

  4. Spring学习(二)-----eclipse新建spring项目

    一:准本工作(下载需要的jar包) 1.下载准备Spring-framework-4.2.0 链接为: http://repo.springsource.org/libs-release-local/ ...

  5. Spring 学习二-----AOP的原理与简单实践

    一.Spring  AOP的原理 AOP全名Aspect-Oriented Programming,中文直译为面向切面(方面)编程.何为切面,就比如说我们系统中的权限管理,日志,事务等我们都可以将其看 ...

  6. Spring学习(二)--装配Bean

    一.Spring装配机制 Spring提供了三种主要的装配机制: 1.在XML中进行显示配置 2.在Java中进行显示配置 3.隐式的bean发现机制和自动装配--自动化装配bean Spring可以 ...

  7. Spring学习(二):Spring支持的5种Bean Scope

    序言 Scope是定义Spring如何创建bean的实例的.Spring容器最初提供了两种bean的scope类型:singleton和prototype,但发布2.0以后,又引入了另外三种scope ...

  8. spring 学习 二 IOC/DI

    中文名称:控制反转 英文名称:( Inversion of Control ) 1 控制反转作用: 一般在编写java程序时,需要程序员自己创建对象的实例,例如 A a=new A();语句,就是程序 ...

  9. Spring学习二----------IOC及Bean容器

    © 版权声明:本文为博主原创文章,转载请注明出处 接口 用于沟通的中介物的抽象化 实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的 ...

随机推荐

  1. 前端——语言——Core JS——《The good part》读书笔记——初篇

    本书是一本经典,优秀的JS书籍. 目的 在书籍中作者多次提及本书的目的,让读者去发现语言中的精华部分,避免糟粕部分,提高代码的编写质量.简述为取其精华去其糟粕. 本书的内容只涉及到Core JS部分, ...

  2. python浅析对return的理解

    函数外部的代码要想获取函数的执行结果,就可以在函数里面用return语句,把结果返回. return 代表一个函数的终止,如果return 后面带一个print 或者return  ,则后面的不执行 ...

  3. Java8 Lambda使用指南

    Java8 Lambda 的使用指南 原文地址:https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html#s ...

  4. Cosmetic Bottles-Cosmetic Packaging Purpose: 5 Things

    Packaging in the cosmetics industry is based on in-depth research. And how it helps to win the edge ...

  5. Go之NSQ

    文章引用自 NSQ NSQ是目前比较流行的一个分布式的消息队列,本文主要介绍了NSQ及Go语言如何操作NSQ. NSQ介绍 NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异. N ...

  6. 计算机二级-C语言-程序设计题-190111记录-两种指针赋值的不同,普通输入输出函数和文件输入输出函数的使用

    //程序设计题:函数fun的功能是:将两位数的正整数a,b合并形成一个整数放在c中.合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上.例如:当 ...

  7. 【笔记5-购物车及地址模块】从0开始 独立完成企业级Java电商网站开发(服务端)

    购物车模块 数据库表设计 购物车表 CREATE TABLE mmall_ cart ( 'id' int(11) NOT NULL AUTO_ INCREMENT, 'user_ id' int(1 ...

  8. Java入门笔记 05-多线程

    介绍:Java提供了非常优秀的多线程支持,程序可以通过非常简单的方式来启动多线程.本章主要内容为:多线程的创建.启动.控制以及同步操作,并介绍JDK 5新增的线程创建方式. 一.线程的创建与使用: 1 ...

  9. hexo 搭建静态博客 + Next 主题配置

    参考手册 HEXO:https://hexo.io/zh-cn/ NEXT:http://theme-next.iissnan.com/ 安装hexo npm install hexo-cli -g ...

  10. CSS3绘制不规则图形,代码收集

    三角形系列(三角形.倒三角.左三角.右三角.左上三角.右上三角.左下三角.右下三角) 主要用到的是:宽度高度设置为0, border的各个边的设置(各个边的透明或不透明): .triangle-up ...