一、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. CentOS7 下 yum 安装 Docker CE

    前言 Docker 使用越来越多,安装也很简单,本次记录一下基本的步骤. Docker 目前支持 CentOS 7 及以后的版本,内核要求至少为 3.10. Docker 官网有安装步骤,本文只是记录 ...

  2. CentOS6.5 更新gcc-7.3.0

    # [1]查看当前版本 gcc --version # 显示4.8.3 # [2]下载更新版本包 # 经实测,本地下载包很慢,建议用迅雷下载(新建任务,输入下载地址:https://ftp.gnu.o ...

  3. apache添加ssl协议实现用户认证

    目标 1对服务器的访问由http改为https, 2仅有证书的客户端可以访问服务器, 3.通过服务器端的配置,可以停用某个客户端的证书. 一 Apache服务器相关配置: 在../apache/con ...

  4. vs2012新建单元测试

    多写单元测试也是算向优秀程序员迈进吧((ˇˍˇ)),就像我们小时候做算算术一样,老师会交给我们怎么样检验答案是否正确性.那么我们做程序员也一样,检验自己写的代码是否和我们预期的结果一样!项目小还行,但 ...

  5. C# Dapper 的简单实用

    首先引入dapper  PM>Install-Package Dapper -Version 2.0.4 (可能会出现因版本问题而安装失败详情见官网:https://stackexchange. ...

  6. H5+asp.net 微信开发 遇到过的坑

    一.微信授权登录 1. 根据code 获取_access_tokens 2. 根据取到的openid和_access_tokens获取用户信息最神奇的是我用我自己的微信账号测试,一开始还可以取到tok ...

  7. C#生成唯一不重复订单号帮助类

    1.使用场景 通常,在做一些表单的功能时,需要生成唯一不重复的订单单号,本文提供的帮助类可以适合大多数场景的单号生成使用,拿来即用,方便快捷无重复.而且,在高并发的情况下也是可以使用的. 之前看到有人 ...

  8. 2019 中兴java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.中兴等公司offer,岗位是Java后端开发,因为发展原因最终选择去了中兴,入职一年时间了,也成为了面试官,之 ...

  9. drf--认证组件

    目录 认证简介 用户认证RBAC(Role-Based Access Control) 局部使用 全局使用 源码分析 认证简介 使用场景:有些接口在进行访问时,需要确认用户是否已经登录,比如:用户需要 ...

  10. flask建表遇到的错误: flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specified key was too long; max key length is 767 bytes')

    error:flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specifie ...