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. 使用docker容器时遇到的2个问题

    最近项目在centOS7服务器上用docker部署了几个服务,在运行的时候发现,总是过一段时间,容器内的根目录就变为只读而无法写入了. 经过调查都是因为docker/devicemapper/devi ...

  2. 【网搜】禁止 number 输入非数字(Android仍有问题)

    目的:使用 number 表单,让其只可输入数字. 问题:ios 可正常限制,Android 仍可输入  [ e | . |  - |  + ]   这4个字符.猜测这4个字符在数值中为科学记数.小数 ...

  3. js加密(七)steam登录

    1. url: https://store.steampowered.com/login/?redir=&redir_ssl=1 2. target: 登录 3. 分析 3.1 老样子,抓包, ...

  4. HyperLedger Fabric 资料网址大全

    BLOCKCHAIN FOR DEVELOPERS 官方网址 i. 这个网址是ibm给的测试网址,注册进去就可以设置4个节点的区块链,而且有智能合约可以测试 区块链和HyperLedger开源技术讲堂 ...

  5. robotframe常用的类库、对应的方法和属性

    robotframe常用的类库.对应的方法和属性

  6. AcWing - 156 矩阵(二维哈希)

    题目链接:矩阵 题意:给定一个$m$行$n$列的$01$矩阵$($只包含数字$0$或$1$的矩阵$)$,再执行$q$次询问,每次询问给出一个$a$行$b$列的$01$矩阵,求该矩阵是否在原矩阵中出现过 ...

  7. 如何在CentOS 7上安装Apache

    使用systemctl管理Apache服务 我们可以像任何其他系统单元一样管理Apache服务. 要停止Apache服务,请运行: sudo systemctl stop httpd 要再次启动,请键 ...

  8. 关于React Native init 项目时候速度太慢的解决方法

    因为init项目的时候需要下载资源,但又因为react native的网站被墙所以下载很慢,解决方法就是换成淘宝的NPM镜像 我是直接使用了命令去替换了NPM $ npm install -g cnp ...

  9. mysql-8.0.18-winx64 环境变量的配置

    1. 鼠标右击   此电脑    -->属性 如图:进行步骤 1->2->3 接下来就可以使用命令mysql  -u  root  -p登录mysql了 启动mysql的命令为net ...

  10. sql语句查询指定月份数据

    要求:查询出emp表中1981年2月份入职的员工 emp表 常用的两种方式: 1.YEAR查询年,MONTH查询月 SELECT * FROM emp WHERE ' 2.date_format (使 ...