Java开发工程师(Web方向) - 04.Spring框架 - 第2章.IoC容器

第2章.IoC容器

IoC容器概述

abstract: 介绍IoC和bean的用处和使用

IoC容器处于整个Spring框架中比较核心的位置:Core Container: Beans, Core, Context, SpEL

为上层AOP/Aspects/Instrumentation/Messaging提供支持

IoC容器的用途:

创建对象的依赖,最后组装成所需的业务对象

容器通过业务对象和配置(application-context.xml; xxxController.java)-->生成可用对象

在Spring场景下,把对象A/B/C都称作Bean

从代码角度看,一个ApplicationContext (org.springframework.context包下,属于spring-context依赖中)对象就是一个IoC容器

初始化IoC容器:

在web项目的web.xml中,用

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:application-context.xml</param-value>

</context-param>

ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");

(文件系统中:ApplicationContext context = new FileSystemXmlApplicationContext("/home/user/conf/application-context.xml");)

来初始化。

定义一个Bean:

在application-context.xml中

<beans>

  ...

  <bean id="screwDriver" class="package_url"></bean>

</beans>

使用Bean:

1. 初始化容器:ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");

2. 通过getBean()获取对象:ScrewDriver screwDriver = context.getBean("screwDriver", ScrewDriver.class);

3. 使用对象:screwDriver.use();

实例演练:

1. New Maven Project -> Create a simple project (skip archetype selection)

GroupId: com.netease.nanodegree

ArtifactId: spring-container

2. 将所需依赖加入pom.xml

<dependencies>
     <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.1.RELEASE</version>
    </dependency>
</dependencies> 

发现依赖的jar包自动被加入

3. 在src/main/resources/下新建application-context.xml

初始为:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

</beans>

此时,还未定义任何bean,因此还不能从容器中获取任何bean

4. 在src/main/java/下新建类ScrewDriver.java

package: com.netease.nanodegree;

package com.netease.nanodegree;

public class ScrewDriver {
    public void ues () {
        System.out.println("Use screw driver");
    }
}

5. 此时有了bean,在application-context.xml中加入相关bean的定义

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #3933ff }
span.s1 { color: #009193 }
span.s2 { color: #4e9192 }
span.s3 { color: #000000 }
span.s4 { color: #932192 }

<bean id = "screwDriver" class = "com.netease.nanodegree.ScrewDriver"></bean>

6. 在src/main/java/com.netease.nanodegree下新建测试类TestContainer.java

7. Run as -> Java Application

Bean的作用域:Bean的有效范围

singleton:与设计模式中的singleton有点像

保证对象在整个容器中最多只能有一个单例,也保证在整个生命周期中只会创建一个实例

上例中bean定义的默认作用域就是singleton

也可以显式定义<bean id="screwDriver" class="com.netease.nanodegree.ScrewDriver" scope="singleton"></bean>

实例Test:

ScrewDriver.java

public class ScrewDriver {
    private String color = "red";
    public void use () {
        //System.out.println("Use screw driver");
        System.out.println("Use " + color + " screw driver");
    }

    public void setColor (String color) {
        this.color = color;
    }
}

TestContainer.java

要想测试是不是单例对象,使用getBean()得到两个对象并设置属性为"green",如果是单例,则两个对象的属性均为"green"

prototype

在web应用场景下才出现的:

request

global session

session

application

依赖注入

时间: 2024-11-20 17:43:51

Java开发工程师(Web方向) - 04.Spring框架 - 第2章.IoC容器的相关文章

Java开发工程师(Web方向) - 04.Spring框架 - 第3章.AOP技术

Spring框架 - AOP概述 笔记https://my.oschina.net/hava/blog/758873Spring框架 - AOP使用 笔记https://my.oschina.net/hava/blog/758881 AOP技术单元测试 返回 本次得分为:7.00/7.00, 本次测试的提交时间为:2017-09-11, 如果你认为本次测试成绩不理想,你可以选择再做一次. 1 单选(2分) 如下关于AOP的描述中错误的是: 得分/总分 A. AOP可以对代码进行解耦: B. A

Java开发工程师(Web方向) - 03.数据库开发 - 第1章.JDBC

第1章--JDBC JDBC基础 通过Java Database Connectivity可以实现Java程序对后端数据库的访问 一个完整的数据库部署架构,通常是由客户端和服务器端两部分组成 客户端封装数据库请求,并发送给服务器端,服务器端执行完毕后将结果返回给客户端 常见客户端工具: MySQL Workbench(图形化工具操作简单,但只能实现简单的查询) JDBC(驱动程序jar包) 命令行工具(直接敲入SQL语句进行查询) 市面上多种数据库不尽相同,学习成本高,数据库迁移的移植性 --

Java开发工程师(Web方向) - 01.Java Web开发入门 - 第4章.Maven

第4章--Maven Maven实战 Java Web应用的部署: 手动式: 编译:javac -cp $CATALINA_HOME/lib/servlet-api.jar web-inf/classes/package/NoodlesServlet.java 打包:jar cvf Restaurant.war . 移动:mv Restaurant.war .../webapps/ 项目复杂时:比如项目文件很多 -- IDE如eclipse --> IDE式:(如eclipse) 下载第三方依赖

Java开发工程师(Web方向) - 02.Servlet技术 - 期末考试

Servlet课程考试 Servlet课程考试 Servlet课程考试 总分:55分 限定时间:120分钟 进入考试 答案已成功提交!请耐心等待成绩公布 Servlet课程考试: 1(12分) 简单谈一下你理解的Servlet是什么,以及Servlet的工作原理. Servlet即Server Applet,是在服务器端运行的程序.一个Servlet对象实际上就是一个Java类. 浏览器在与服务器通信时,浏览器先向服务器发出请求,该请求被Servlet容器解析并发送给对应Servlet对象后,由

Java开发工程师(Web方向) - 01.Java Web开发入门 - 第6章.蜂巢

第6章--蜂巢 蜂巢简介 网站开发完,就需要测试.部署.在服务器上运行. 网易蜂巢: 采用Docker容器化技术的云计算平台 https://c.163.com 容器管理:容器可被视作为云主机的服务器 服务管理:服务可由多个容器组成,可以有多个副本 镜像仓库:可快速创建容器和服务 后端服务:blahblahblah 特点: 保证环境一致: 实际中开发环境.测试环境.生产环境等会不大相同 环境差异可能会导致业务代码运行得到不同结果 蜂巢底层采用Docker容器:把业务代码和运行环境打包成为一个镜像

Java开发工程师(Web方向) - 03.数据库开发 - 第4章.事务

第4章--事务 事务原理与开发 事务Transaction: 什么是事务? 事务是并发控制的基本单位,指作为单个逻辑工作单元执行的一系列操作,且逻辑工作单元需满足ACID特性. i.e. 银行转账:开始交易:张三账户扣除100元:李四账户增加100元:结束交易. 事务的特性:ACID 原子性 Atomicity:整个交易必须作为一个整体来执行.(要么全部执行,要么全部不执行) 一致性 Consistency:整个交易总体资金不变 隔离性 Isolation: case1: 若张三给李四转账过程中

Java开发工程师(Web方向) - 03.数据库开发 - 期末考试

期末考试 编程题 本编程题包含4个小题,覆盖知识点从基础的JDBC.连接池到MyBatis. 1(10分) 有一款在线教育产品"天天向上"主要实现了在手机上查看课程表的功能.该产品的后端系统有一张保存了所有客户课程信息的数据库表,表结构如下: 请使用JDBC编写一段程序,实现读取用户名为"ZhangSan"的同学的所有课程名称,输出到控制台终端. 答: 数据库: /usr/local/mysql/bin ./mysql -u root -p mysql> CR

Java开发工程师(Web方向) - 01.Java Web开发入门 - 第3章.Servlet应用

第3章.Servlet应用 转发与重定向 过滤器与监听器 Servlet并发处理

Java开发工程师(Web方向) - 01.Java Web开发入门 - 第2章.HTTP协议简介

第2章--HTTP协议简介 HTTP协议简介 Abstract: HTTP协议的特性,HTTP请求/响应的过程,HTTP请求/响应的报文格式等知识,最后会演示如何通过Chrome提供的开发者工具,去跟踪调试一次HTTP请求. HTTP protocol: 请求响应式协议: client -->  server : HTTP 请求 client <--  server : HTTP 响应 一个HTTP请求和一个HTTP响应 -->  一次HTTP事务 任意两次HTTP事务都是indepen