二.IoC

  1. 中文名称:控制反转
  2. 英文名称:(Inversion of Control)
    3.I oC 是什么?
    3.1 IoC 完成的事情原先由程序员主动通过 new 实例化对象事情,转交给 Spring 负责.
    3.2 控制反转中控制指的是:控制类的对象.
    3.3 控制反转中反转指的是转交给 Spring 负责.
    3.4 IoC 最大的作用:解耦.
    3.4.1 程序员不需要管理对象.解除了对象管理和程序员之间
    的耦合.

三.Spring 环境搭建

  1. 导入 jar

1.1 四个核心包一个日志包(commons-logging)
2. 在 src 下新建 applicationContext.xml
2.1 文件名称和路径自定义.
2.2 记住 Spring 容器 ApplicationContext,applicationContext.xml 配置的信息最终存储到了 AppliationContext 容器中
2.3 spring 配置文件是基于 schema
2.3.1 schema 文件扩展名.xsd
2.3.2 把 schema 理解成 DTD 的升级版.
2.3.2.1 比 DTD 具备更好的扩展性.
2.3.3 每次引入一个 xsd 文件是一个 namespace(xmlns)
2.4 配置文件中只需要引入基本 schema
2.4.1 通过<bean/> 创建对象.
2.4.2 默认配置文件被加载时创建对象.

  <?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/sc
hema/beans
http://www.springframework.org/schema/beans/spring-be
ans.xsd">
<!-- id 表示获取到对象标识
class 创建哪个类的对象
-->
<bean id="peo" class="com.bjsxt.pojo.People"/>
</beans>
  1. 编写测试方法
    3.1 getBean(“<bean>标签 id 值”,返回值类型);如果没有第二个参数, 默认是 Object
    3.2 getBeanDefinitionNames(),Spring 容器中目前所有管理的所有对象.
ApplicationContext ac = new  ClassPathXmlApplicationContext("applicationContext.xml");
People people = ac.getBean("peo",People.class);
System.out.println(people);
// String[] names = ac.getBeanDefinitionNames();
// for (String string : names) {
// System.out.println(string);
// }

四.Spring 创建对象的三种方式

  1. 通过构造方法创建
    1.1 无参构造创建:默认情况.
    1.2 有参构造创建:需要明确配置
    1.2.1 需要在类中提供有参构造方法
    1.2.2 在 applicationContext.xml 中设置调用哪个构造方法创建对象
    1.2.2.1 如果设定的条件匹配多个构造方法执行最后的构造方法
    1.2.2.2 index : 参数的索引,从 0 开始
    1.2.2.3 name: 参数名
    1.2.2.4 type:类型(区分开关键字和封装类 int 和 Integer)
<bean id="peo" class="com.bjsxt.pojo.People">
<!-- ref 引用另一个 bean value 基本数据类型或
String 等 -->
<constructor-arg index="0" name="id" type="int"
value="123"></constructor-arg>
<constructor-arg index="1" name="name"
type="java.lang.String" value="张三
"></constructor-arg>
</bean>
  1. 实例工厂
    2.1 工厂设计模式:帮助创建类对象.一个工厂可以生产多个对象. 2.2 实例工厂:需要先创建工厂,才能生产对象
    2.3 实现步骤:
    2.3.1 必须要有一个实例工厂
public class PeopleFactory {public People newInstance(){return new People(1,"测试");}
}

2.3.2 在 applicationContext.xml 中配置工厂对象和需要创建的
对象

<bean id="factory"
class="com.bjsxt.pojo.PeopleFactory"></bean>
<bean id="peo1" factory-bean="factory"
factory-method="newInstance"></bean>
  1. 静态工厂
    3.1 不需要创建工厂,快速创建对象. 3.2 实现步骤
    3.2.1 编写一个静态工厂(在方法上添加 static)
public class PeopleFactory {public static People newInstance(){return new People(1,"测试");}
}

3.2.2 在 applicationContext.xml 中

<bean id="peo2" class="com.bjsxt.pojo.PeopleFactory"
factory-method="newInstance"></bean>

五.如何给 Bean 的属性赋值(注入)

  1. 通过构造方法设置值.
  2. 设置注入(通过 set 方法)
    2.1 如果属性是基本数据类型或 String 等简单
<bean id="peo" class="com.bjsxt.pojo.People"><property name="id" value="222"></property><property name="name" value="张三"></property>
</bean>

2.1.1 等效于

<bean id="peo" class="com.bjsxt.pojo.People"><property name="id"><value>456</value></property><property name="name"><value>zhangsan</value></property>
</bean>

2.2 如果属性是 Set<?>

<property name="sets"><set><value>1</value><value>2</value><value>3</value><value>4</value></set>
</property>

2.3 如果属性是 List<?>

<property name="list"><list><value>1</value><value>2</value><value>3</value></list>
</property>

2.3.1 如果 list 中就只有一个值

<property name="list" value="1">
</property>

2.4 如果属性是数组
2.4.1 如果数组中就只有一个值,可以直接通过 value 属性赋值

<property name="strs" ><array><value>1</value><value>2</value><value>3</value></array>
</property>

2.5 如果属性是 map

<property name="map"><map><entry key="a" value="b" ></entry><entry key="c" value="d" ></entry></map></property>

2.6 如果属性 Properties 类型

<property name="demo"><props><prop key="key">value</prop><prop key="key1">value1</prop></props>
</property>

六. DI

  1. DI:中文名称:依赖注入
  2. 英文名称((Dependency Injection)
  3. DI 是什么?
    3.1 DI 和 IoC 是一样的
    3.2 当一个类(A)中需要依赖另一个类()对象时,把 B 赋值给 A 的过
    程就叫做依赖注入.
  4. 代码体现:
<bean id="peo" class="com.bjsxt.pojo.People"><property name="desk" ref="desk"></property>
</bean><bean id="desk" class="com.bjsxt.pojo.Desk"><property name="id" value="1"></property><property name="price" value="12"></property>
</bean>

IoC、Spring 环境搭建、Spring 创建对象的三种方式、DI相关推荐

  1. Spring 学习之 二----Spring创建对象的三种方式

    最近在系统的学习Spring,现在就Spring的一些知识进行总结. 我们知道Spring是一个开放源代码的设计层面的框架,他主要解决的是业务逻辑层与其他各层之间松耦合的问题. Spring 有三个核 ...

  2. Spring创建对象的三种方式以及创建时间

    创建对象的三种方式: 1.采用默认的构造函数创建 2.采用静态工厂方法 1.写一个静态工厂方法类 public class HelloWorldFactory { public static Hell ...

  3. spring入门:beans.xml不提示、别名、创建对象的三种方式

    spring的版本是2.5 一.beans.xml文件不提示 Location:spring-framework-2.5.6.SEC01\dist\resources\spring-beans-2.5 ...

  4. 【Spring杂烩】探讨Spring向容器注册Bean的三种方式

    探讨Spring向容器注册Bean的三种方式 重点了解@Import实现的三种子方式 前提概要 Spring向容器注册Bean的三种方式 通过@ComponentScan.@Componet 通过@B ...

  5. 课程介绍 复习 创建对象的三种方式 自定义构造函数创建对象 工厂模式创建对象

    课程介绍 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...

  6. 【JavaScript】创建对象的三种方式

    JavaScript创建对象的三种方式 1.调用系统的构造函数创建对象2.自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象)3.字面量的方式创建对象 一.调用系统的构造函数创建对象 举个栗 ...

  7. Spring学习总结3——配置datasource三种方式

    为什么80%的码农都做不了架构师?>>>    jdbc.properties文件信息 ##Oracle 11g jdbc.driverClassName=oracle.jdbc.O ...

  8. Linux下服务器基本环境搭建步骤详解(三种软件安装方式)

    Linux下服务器基本环境搭建 小伙伴们注意看:下面使用三种方式分别安装JDK.Tomcat.Docker进行演示 操作系统基于CentOs7. 文章目录 Linux下服务器基本环境搭建 前言 一.L ...

  9. Spring Boot当中获取request的三种方式

    本篇博客主要记录request相关知识,也是开发当中经常遇到的,感兴趣的跟小编一起学习吧! 目录 一.请求过程 二.获取request的三种方式 2.1.可以封装为静态方法 2.2.controlle ...

最新文章

  1. COOKIE格式与读写相关
  2. wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString....转换
  3. Matlab:成功解决引用了已清除的变量 handles
  4. 【面试招聘】聊聊求职过程中的技术面试
  5. pyqt5获取文本框里输入的值_实战PyQt5: 060-输入对话框QInputDialog
  6. css钢铁侠视角,CSS3 Iron Man 钢铁侠肖像
  7. 找出一个数组中唯一一个出现2次的数字
  8. [LOJ6278]数列分块入门 2
  9. 真香 自从用了Charles,Fiddler已经被我彻底卸载了
  10. JavaScript:字符串相关操作
  11. “echo ”和“echo ”的区别
  12. 了解开源图表组件FusionChartsFree
  13. qq游戏不显示登陆服务器,QQ游戏怎么登陆? qq游戏不能登录怎么办?
  14. 51单片机小白零基础教程——数码管的静态显示,以及数码管拓展程序(含74HC573锁存器的介绍)
  15. android iccid获取不完整,Android调用getSimSerialNumber获取iccid不完整
  16. 抽35块树莓派新品单片机送给可爱的你们
  17. 前端:解决vue2.0只能运行在Local,不能运行在NetWork的问题
  18. 如何提取公众号文章中的音频
  19. 【论文晨读】一种移动机器人全局最优路径规划算法 孟 偲2008
  20. Remote Execution - SaltStack远程执行模块使用指南

热门文章

  1. 01c-1: 主流长远
  2. 小程序开发 缓存的应用
  3. Python爬虫_Cookie
  4. 移动站原生的select实现省市区联动选择
  5. 三种方法实现弹出框边框半透明和圆角的效果
  6. css3实现的the Sexy Buttons
  7. LeetCode--88.合并两个有序数组(插入法,排序法)
  8. PCA与SVD的数学原理
  9. Design Patterns(设计模式-发布/订阅)
  10. TS Interface(接口)