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. CSS学习(10)行盒盒模型

    常见的行盒:包含具体内容的元素 span.strong.em.i.img.video.audio 显著特点: 1.盒子沿着内容延伸 2.行盒不能设置宽高,调整行盒的宽高,应使用字体大小.行高.字体类型 ...

  2. 每天进步一点点------altium designer 实用的快捷键

    1.设计浏览器快捷键: 鼠标左击                         选择鼠标位置的文档鼠标双击                         编辑鼠标位置的文档鼠标右击        ...

  3. KFC 小猪短租

    # 分析肯德基门店信息 import requests,json post_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op= ...

  4. Requests库网络爬虫实战

    实例一:页面的爬取 >>> import requests>>> r= requests.get("https://item.jd.com/1000037 ...

  5. 总结fiddler抓https包

    把fiddler工具>选项>https>勾选所有,点击actions,导出的证书导入到浏览器(打开右上角浏览器设置>选项>高级>证书>查看证书>证书机构 ...

  6. Tomcat,Jboss,Weblogic通过jndi连接数据库

    1.  Tomcat配置Jndi数据源 1.1在tomcat服务器的lib目录下加入数据库连接的驱动jar包 1.2修改tomcat服务器的conf目录下server.xml配置文件 编辑server ...

  7. Move-to-front(MTF) and Run-lenght encoding(RLE) algorithms

    mtf算法(关于该算法:https://www2.cs.duke.edu/csed/algoprobs/beta/bw1.html): #include <stdio.h> #includ ...

  8. @ModelAttribute与@RequestBody的区别

    一.@ModelAttribute与@RequestBody的区别 @ModelAttribute与@RequestBody都是用来注解解析前端发来数据,并自动对应到所定义的字段名称. 这里先放结论, ...

  9. linux彻底干干净净完全卸载 mysql

    本人mysql 装的5.7,liunux版本百度云的centos 6.5 1.查看mysql的安装情况 rpm -qa|grep -i mysql 2.停止mysql服务,删除mysql rpm -e ...

  10. byte的取值范围

    byte b = Byte.MAX_VALUE;        b+=1;        System.out.println(b); //输出为-128 取值范围为[-128 -  127] 解析: ...