Spring IOC容器

风伟酱_5140

风伟酱_5140

2017-08-19

1728人浏览

原创

1.spring框架简介

什么是Spring?

Spring是一个开源的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,减少侵入

Spring提供的IOC和AOP应用,可以将组件的耦合度降至最低,即解耦,便于系统日后的维护和升级

Spring为系统提供了一个整体的解决方案,开发者可以利用它本身提供的功能外,也可以与第三方框架和技术整合应用,可以自由选择采用哪种技术进行开发

2.容器和Bean管理

Spring容器简介

在Spring中,任何java类和javaBean都被当成Bean处理,这些Bean通过容器管理和应用

Spring容器实现了IOC和AOP机制,这些机制可以简化Bean对象创建和Bean对象之间的解耦

Spring容器有BeanFactory和ApplicationContext两种类型

(什么是javaBean:一种简单规范的java对象;何时使用Spring:当需要管理javaBean对象时候就可以使用,Spring是最简洁的对象管理方案之一)

Spring容器的实例化

ApplicationContext继承自BeanFactory接口,拥有更多的企业级方法,推荐使用该类型,实例化方法如下:

//加载文件系统中的配置文件实例化

String conf = “C:\applicationContext.xml”;

ApplicationContext ac = new FileSystemXmlApplicationContext(conf);

//加载工程classpath下的配置文件实例化

String conf = “applicationContext.xml”;

ApplicationContext ac = new ClassPathXmlApplicationContext(conf);

Spring容器的使用

从本质上讲,BeanFactory和ApplicationContext仅仅只是一个维护Bean定义以及相互依赖关系的高级工厂接口。通过BeanFactory和ApplicationContext我们可以访问bean定义

首先在容器配置文件applicationContext.xml中添加Bean定义

然后在创建BeanFactory和ApplicationContext容器对象后,调用getBean()方法获取Bean的实例即可[getBean("标识符")]

Bean的实例化

Spring容器创建Bean对象的方法有以下三种:

-用构造器来实例化

(id或name属性用于指定Bean名称,用于从Spring中查找这个Bean对象;class用于指定Bean类型,会自动调用无参数构造器创建对象)

-使用静态工厂方法实例化

(id属性用于指定Bean名称,class属性用于指定工厂类型,factory-method属性用于指定工厂中创建Bean对象的方法,必须用static修饰的方法)

-使用实例工厂方法实例化

 (id用于指定Bean名称,factory-bean属性用于指定工厂Bean对象,factory-method属性用于指定工厂中创建Bean对象的方法)

(将对象创建规则告诉Spring,Spring会帮你去创建对象;基于配置和默认规则,减少了代码的书写)

 Bean的命名

Bean的名称:

在Spring容器中,每个Bean都需要有名字(即标识符),该名字可以用元素的id或name属性指定;id属性比name严格,要求具有唯一性,不允许用"/"等特殊字符

Bean的别名:

为已定义好的Bean,再增加另外一个名字引用,可以使用指定

Bean的作用域:

Spring容器在实例化Bean时,可以创建以下作用域的Bean对象

1、singleton作用域


在每个Spring IOC容器中一个bean定义对应一个对象实例,默认项
配置实例:

或者


2、prototype


一个bean定义对应多个对象实例
配置实例:

或者


3、request

request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
request、session、global session使用的时候,首先要在初始化web的web.xml中做如下配置:


如果你使用的是Servlet 2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可:
...org.springframework.web.context.request.RequestContextListener...

如果是Servlet2.4以前的web容器,那么你要使用一个javax.servlet.Filter的实现:
..requestContextFilterorg.springframework.web.filter.RequestContextFilterrequestContextFilter/*...
接着既可以配置bean的作用域了:


4、session

session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效(在一个HTTPSession中,一个bean定义对应一个实例,仅限于Web环境)
配置实例:
和request配置实例的前提一样,配置好web启动文件就可以如下配置:


5、global session

在一个全局的HTTPSession中,一个bean定义对应一个实例,仅在基于portlet的Web应用中才有意义,Portlet规范定义了全局Session的概念
配置实例:
和request配置实例的前提一样,配置好web启动文件就可以如下配置:

(上面的Bean作用域,可以通过定义的scope属性指定)

Bean的生命周期回调

指定初始化回调方法:

指定销毁回调方法,仅适用于singleton模式的bean:

在顶级的元素中的default-init-method属性,可以为容器所有指定初始化回调方法

  

在顶级的元素中的default-destroy-method属性,可以为容器所有指定销毁回调方法

  

Bean延迟实例化

在ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化

如果不想让一个singleton bean在ApplicationContext初始化时被提前实例化,可以使用元素的lazy-init = "true" 属性改变

一个延迟初始化bean将在第一次被用到时实例化

在顶级的元素中的default-lazy-init属性,可以为容器所有指定延迟实例化特性

指定bean依赖关系

当一个bean对另一个bean存在依赖关系时,可以利用元素的depends-on属性指定

当一个bean对多个bean存在依赖关系时,depends-on属性可以指定多个bean名,用逗号隔开

3.容器的IOC应用

IOC概念

IOC全称是Inversion of  Control,被译为控制反转;

IOC是指程序中对象的获取方式发生反转,由最初的new方式创建,转变为由第三方框架创建,注入。第三方框架一般是通过配置方式指定注入哪一个具体实现,从而降低了对象之间的耦合度

IOC按实现方法不同,可以分为依赖注入DI和依赖查找两种

Spring容器是采用DI方式实现了IOC控制,IOC是Spring容器的基础和核心

DI概念

DI全称是Dependency  Injection,被译为依赖注入

DI的基本原理就是将一起工作具有关系的对象,通过构造方法参数或方法参数传入建立联系,因此容器的工作就是创建bean时注入那些依赖关系

IOC是一种思想,而DI是实现IOC的主要技术途径

DI主要有两种注入方式,即Setter注入和构造器注入

Setterr注入

通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现setter方式的注入

public class JDBCDataSource{

  private String driver;

  public void setDriver(String driver){

    try{

      Class.forName(driver);

      this.driver = driver;

      }catch(Exception e){

        throw new RuntimeException(e);

      }

     }

    //其他代码....

  }

在容器xml配置中,配置注入参数

  

  

  

  

构造器注入

基于构造器的注入是通过调用带参数的构造器来实现的,容器在bean被实例化的时候,根据参数类型执行相应的构造器

public class OracleUserDAO implements UserDAO{

  private JDBCDataSource dataSource;

  public OracleUserDAO(JDBCDataSource dataSource){

    this.dataSource = dataSource;

  }

  //其他代码.....

}

按构造器参数索引指定注入

  

  

  

  

  

自动装配

Spring  IOC容器可以自动装配(autowire)相互协作bean之间的关联关系,autowire可以针对单个bean进行设置,autowire的方便之处在于减少xml的注入配置

在xml配置文件中,可以在元素中使用autowire属性指定自动装配规则,一共有五种类型值

属性值为no:禁止自动装配,默认值;

属性值为byName:根据属性名自动装配,此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配;

属性值为byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配;

属性值为constructor:与byType的方式类似,不同之处在于它应用于构造器参数;

属性值为autodetect:通过bean类来决定是使用constructor还是byType方式进行自动装配,如果发现默认的构造器,那么将使用byType方式

配置示例:

  

上述配置,在UserService中如果存在接收UserDao类型的方法Setter方法,Spring就可以自动将userDAO对象注入进去


相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

2026.11.12

80

15

Go-Zero安装与goctl环境配置教程
Go-Zero安装与goctl环境配置教程

本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。

2026.11.12

60

15

Go-Zero零基础入门教程
Go-Zero零基础入门教程

本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。

2026.11.12

40

15

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

140

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

120

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

120

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

100

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

80

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

100

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Spring Boot 官方快速入门指南
Spring Boot 官方快速入门指南

共0课时 | 0人学习

Spring Boot 官方参考文档
Spring Boot 官方参考文档

共0课时 | 0人学习

尚硅谷新版SpringBoot3教程
尚硅谷新版SpringBoot3教程

共0课时 | 0人学习