一、Spring 的两种核心容器:BeanFactory 和 ApplicationContext(都通过xml加载Bean的)

二、通过ApplicationContext实例化:

1.通过ClassPathXmlApplicaationContext创建

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);

configLocation参数用于指定Spring配置文件的名称和位置。

如果其值为“applicationContext.xml”,则Spring会去类路径中查找名为applicationContext.xml的配置文件

Spring配置文件名称可自定义,一般开发都定为applicationContext.xml(有时也定为beans.xml)

所以常用语句就是:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

表示初始化spring容器,加载配置文件。

2.通过FileSystemXmlApplicationContext创建

ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);

不是从类路径中读取配置文件,而是通过参数指定配置文件的位置,例如:"D:/workspaces/applicationContext.xml",如果参数中写的不是绝对路径,调用时默认用绝对路径。灵活性差,不推荐。

然后,xml文件是啥?类似这种东西,除了<bean>,其他照抄,用多了自然就会懂。

 <?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">
<!-- 将指定类配置给Spring,让Spring创建其对象的实例 -->
<bean id="userDao22" class="com.itheima.ioc.UserDaoImpl" /> <!--添加一个id为userService的实例 -->
<bean id="userService" class="com.itheima.ioc.UserServiceImpl">
<!-- 将id为userDao22的Bean实例注入到userService实例中,name属性表示Bean实例中的相应属性名,ref属性用于指定其属性值 -->
<property name="userDao" ref="userDao22" />
</bean> </beans>

通过容器获取实例:

类名 + 对象名  = (强转类名)+ applicationContext.getBean(String name/id);

比如:UserService userService = (UserService) applicationContext.getBean("userService");

三、控制反转和依赖注入

1.控制反转(IoC,Inversion of Control):说白了就是不用new,用容器获取对象,把创建和查找依赖对象的控制权交给了容器。

2.依赖注入(DI,Dependency Injection):使用Spring框架创建对象时,动态地将其所依赖的对象注入Bean组件中,两种方法。(1)属性setter方法注入,指Spring容器使用setter方法注入被依赖的实例。通过调用无参构造器或无参静态工厂方法实例化Bean后,调用该Bean的setter方法。(2)构造方法注入:指Spring容器使用构造方法注入被依赖的实例。

书上多少个名字重合的,都不知道哪个匹配哪个,现有以下几个接口和实现接口的类

package com.itheima.ioc;
public interface UserDao {
public void say();
}
package com.itheima.ioc;
public class UserDaoImpl implements UserDao {
public void say() {
System.out.println("userDao say hello World 222!");
}
}
package com.itheima.ioc;
public interface UserService {
public void say();
}
package com.itheima.ioc;
public class UserServiceImpl implements UserService {
// 声明UserDao属性
private UserDao userDao44;
// 添加UserDao属性的setter方法,用于实现依赖注入
public void setUserDao(UserDao userDao) {
this.userDao44 = userDao;
}
// 实现的接口中方法
public void say() {
//调用userDao中的say()方法,并执行输出语句
this.userDao44.say();
System.out.println("userService say hello World !");
}
}

测试IoC,很简单地调用say方法,本章看不出什么门道。

package com.itheima.ioc;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIoC {
public static void main(String[] args) {
//1.初始化spring容器,加载配置文件
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
//2.通过容器获取userDao实例
UserDao userDao111 = (UserDao) applicationContext.getBean("userDao22"); //3.调用实例中的say()方法
userDao111.say();
}
}

输出:userDao say hello World 222!

测试DI:

package com.itheima.ioc;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDI {
public static void main(String[] args) {
//1.初始化spring容器,加载配置文件
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
//2.通过容器获取UserService实例
UserService userService =
(UserService) applicationContext.getBean("userService");
//3.调用实例中的say()方法
userService.say();
}
}

输出:

userDao say hello World 222!
userService say hello World !

第1章 Spring的应用的更多相关文章

  1. Java开发工程师(Web方向) - 04.Spring框架 - 第1章.Spring概述

    第1章.Spring概述 Spring概述 The Spring Framework is a lightweight solution and a potential one-stop-shop f ...

  2. 2017.2.28 activiti实战--第七章--Spring容器集成应用实例(五)普通表单

    学习资料:<Activiti实战> 第七章  Spring容器集成应用实例(五)普通表单 第六章中介绍了动态表单.外置表单.这里讲解第三种表单:普通表单. 普通表单的特点: 把表单内容写在 ...

  3. Spring学习指南-第二章-Spring框架基础(完)

    第二章 Spring框架基础 面向接口编程的设计方法 ​ 在上一章中,我们看到了一个依赖于其他类的POJO类包含了对其依赖项的具体类的引用.例如,FixedDepositController 类包含 ...

  4. Spring入门篇——第7章 Spring对AspectJ的支持

    第7章 Spring对AspectJ的支持 介绍Spring对AspectJ的支持 7-1 AspectJ介绍及Pointcut注解应用 实例 完成了在xml文件的配置 7-2 Advice定义及实例 ...

  5. Spring入门篇——第6章 Spring AOP的API介绍

    第6章 Spring AOP的API介绍 主要介绍Spring AOP中常用的API. 6-1 Spring AOP API的Pointcut.advice概念及应用 映射方法是sa开头的所有方法 如 ...

  6. Spring入门篇——第5章 Spring AOP基本概念

    第5章 Spring AOP基本概念 本章介绍Spring中AOP的基本概念和应用. 5-1 AOP基本概念及特点 5-2 配置切面aspect ref:引用另外一个Bean 5-3 配置切入点Poi ...

  7. Spring入门篇——第4章 Spring Bean装配(下)

    第4章 Spring Bean装配(下) 介绍Bean的注解实现,Autowired注解说明,基于java的容器注解说明,以及Spring对JSR支持的说明 4-1 Spring Bean装配之Bea ...

  8. Spring入门篇——第3章 Spring Bean装配(上)

    第3章 Spring Bean装配(上) 介绍Bean的作用域.生命周期.Aware接口.自动装配和Resource等内容. 3-1 Spring Bean装配之Bean的配置项及作用域 从上至下依次 ...

  9. Spring入门篇——第2章 Spring IOC容器

    第2章 Spring IOC容器 介绍Spring IOC容器的基本概念和应用 2-1 IOC及Bean容器 自己的理解:什么是IOC?就是利用配置文件(外部容器)来创建对象. 在IOC容器中,所有对 ...

  10. 第01章 Spring概述

    第01章 Spring概述 1.Spring概述 ①Spring是一个开源框架 ②Spring为简化企业级开发而生,使用Spring,JavaBean就可以实现很多以前要靠EJB才能实现的功能.同样的 ...

随机推荐

  1. sublime text 开发记录贴

    1.展示信息有两种: self.view.show_popup('hello'), 这个好看点. sublime.status_message('ssss')    sublime.error_mes ...

  2. centos 7 重新设置分区大小

    一.基础概念Cent0S 7默认启用LVM2(Logical Volume Manager),把机器的一块硬盘分为两个区sda1和sda2,其中分区sda1作为系统盘/boot挂载,少量空间:sda2 ...

  3. for循环中的switch的break和continue作用范围

    for循环中的switch的break和continue作用范围 不空泛的讲理论了,上代码.看下面这个代码: #include <stdio.h> #include <stdlib. ...

  4. python 实例

    进度条 import sys, time class ShowProcess(object): """ 显示处理进度的类 调用该类相关函数即可实现处理进度的显示 &quo ...

  5. switch/case/default中的雷区

    switch的语法如下: switch(表达式){ case常量表达式1: 语句1;break; case常量表达式2: 语句2;break; - case常量表达式n: 语句n;break; def ...

  6. 探索ASP.NET MVC5系列

    探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)     探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存)     探索ASP.NET MV ...

  7. 自定义 Windows 右键菜单项

    注:本文涉及到注册表操作,不认识请不要随意修改! 右键菜单项储存在注册表 HKEY_CLASSES_ROOT 中,一般各种程序的右键菜单项都可以在此项下面找到: 添加右键菜单项 右键单击 shell, ...

  8. C# yield checked,unchecked lock语句(C#学习笔记04)

    特殊语句 yield语句 yield用于终止迭代 只能使用在返回类型必须为 IEnumerable.IEnumerable<T>.IEnumerator 或 IEnumerator< ...

  9. Jemeter学习环境部署。

    本文档中所有软件的下载地址 链接:https://pan.baidu.com/s/1RREUwlH7GtYMUWeiRjtWVg 提取码:zmjy 一.安装jdk 下载网盘中的jdk 双击jdk-8u ...

  10. 第一阶段:Java基础 1.JAVA开发介绍---6. Java基本数据类型

    Java 的两大数据类型: 内置数据类型(基本数据类型) 引用数据类型 本数据类型: Java语言提供了八种基本类型.六种数字类型,一种字符类型,还有一种布尔型. byte,short,int,lon ...