容器概述

ApplicationContext是Spring loC容器实现的代表,它负责实例化,配置和组装Bean。

容器通过读取配置元数据获取有关实例化、配置和组装哪些对象的说明。

配置元数据可以使用XML、Java注解或Java代码来呈现。

它允许你处理应用程序的对象与其他对象之间的互相依赖关系。 配置元数据的方式

  • 使用xml的配置 简单、直观适合入门

  • 基于注解的配置: Spring 2.5支持基于注解的元数据配置. SSM框架开发中的使用

  • 基于Java的配置: 从 Spring 3.0开始,由Spring JavaConfig项目提供的功能已经成为Spring核心框架的一部分。因此,你可以使用Java配置来代替XML配置

  • 定义外部bean . 从spring4.0开始支持springboot1.0之后springboot完全采用javaConfig的方式进行开发

    容器的实例化 对象在Spring容器创建完成的时候就已经创建完成,不是需要用的时候才创建

ioc的优点

1.解耦

2.集中管理

3.功能可复用(减少对象的创建和内存消耗)

4.使得程序的整个体系结构可维护性、灵活性、扩展性变高

// ClassPathXmlApplicationContext 根据项目路径的xml配置来实例化spring容器

// FileSystemXm1ApplicationContext根据磁盘路径的xml配置来实例化spring容器

// AnnotationConfigApplicationContext根据javaconfig来配置实例化spring容器

依赖注入

基于setter方法的依赖注入

1.属性必须声明了set方法
2. name是根据set方法的名字来的比如方法名字是: setIdxx ->name="idxx"
<bean class="cn.tulingxueyuan.beans.User" id="user2"><property name="idtuling" value="1"></property><property name="username" value="zhangsan" ></property><property name= "realname" value="张三"></ property>
</ bean>

基于构造函数的依赖注入

1.将会调用自定义构造函数来实例化对象,就不会调用默认的无参构造函数
2, name是根据构造函数的参数名来的,比如:User(String idxx) -> name="idxx"3. name属性可以省略但是要注意参数的位置
4.如果非要把位置错开可以使用name或者index或者type5. index是下标―从开始
6. type在位置错开情况下只能在类型不一样的时候指定才有明显效果
<bean class="cn.tulingxueyuan. beans. User" id="user3"><constructor-arg name="username" value="lisi"></constructor-arg><constructor-arg name= "id_xushu" value="1 "></constructor-arg><constructor-arg name="reainame"value="李四"></constructor-arg>
</bean>

在容器实例化的时候就会加载所有的bean

控制加载顺序使用depends-on方法

懒加载bean 使用lazy-init设置

<! --
默认为false:在spring容器创建的时候加载(实例化)
true:在使用的时候(getBean)才会去加载(实例化)-->
<bean class="cn.tulingxueyuan.beans.Person" id="person2" lazy-init="true">
<property name="id" value="1"></property>
<property name="realName" value="吴彦祖"></ property><property name="name " value="徐庶"></ property>
</ bean>

自动注入

byType根据类型去自动匹配当出现多个类型或者匹配到类型则会报错 byName根据set方法的名字去自动匹配 constructor根据构造器去匹配:优先会根据参数名字去匹配,假如参数名字没有匹配到,会根据参数类型去匹配,会根据构造函数的参数进行完整的匹配注入:如果构造函数的参数Person(Wife wife3,User user) ioc容器里面必须要有同时有wife和userl,名字没有匹配到会根据类型匹配,类型假如出现多个会注入失败但是不会报错

注解的方式来注册bean

将一个类注入到ioc中的三种方式

  1. xml:<bean>

  2. @Component (@Controller,@Service,@Repository)

  3. @Bean @Import

Bean作用域分为 Singleton(单例)的作用域 和 Prototype(原型)的作用域

<!--作用域scopesingleton 默认:单例只会在Ioc容器种创建一次prototype多例(原型bean)每次获取都会new一次新的bean--><bean class="cn.tulingxueyuan.beans.Person" id="person3" scope="prototype "><property name="id" value="1"></property><property name="realName " value="吴彦祖"></property><property name="name" value="徐庶"></property>
</ bean>
​

注解介绍

扫描包

  • base-package 设置需要扫描的包

  • 排除扫描:<context:exclude-filter设置需要排除扫描的选项包含扫描<context : include-filter设置需要包含扫描的选项

type: 1.annotation默认根据注解的完整限定名设置排除\包括 ​ 2.assignable根据类的完整限定名设置排除\包括 ​ 3.aspectj org.example.. Service+根据切面表达式设置排除\包括,一般不会使用

4.regex org . example . Default.*―根据正则表达式设置包括\排除,一般不会使用 ​ 5.custom org.example.MyTypeFilter 根据接口org.springframework. core. type . TypeFilter设置排除\包括,

  • 使用@Autowired来实现自动注入

    bytype? byname? 默认优先根据类型去匹配 如果匹配到多个类型则会按照名字匹配·如果名又没有匹配到则会报错:

    1. 可以去修改属性的名字对应bean的名字:userServiceImpl

    2. 可以去修改Bean的名字对应属性的名字:@Service("userService")3.可以通过@Qualifier设置属性的别字

    3. 可以通过@Qualifier设置属性的名字(覆盖):@Qualifier("userServiceImpl")

    4. 可以通过@Primary设置其中一个Bean为主要的自动注入Bean: @Primary

    5. 使用泛型作为自动注入限定符

基于java的容器配置

核心注解 @Bean和@Configuration

对比xml

Spring Framework --wenyu2相关推荐

  1. 手动创建Spring项目 Spring framework

    之前学习框架一直是看的视频教程,并且在都配套有项目源码,跟着视频敲代码总是很简单,现在想深入了解,自己从官网下载文件手动搭建,就遇到了很多问题记载如下. 首先熟悉一下spring的官方网站:http: ...

  2. Spring Framework 6 将采用 Java 17,是时候将你的应用升级了

    关于从先前的长期支持版本(Java 11 和 Java 8)迁移代码,你需要知道的是什么? 整理 | 王晓曼 出品 | CSDN(ID:CSDNnews) Spring Framework 6 将采用 ...

  3. spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包

    下载spring http://spring.io/ 最重要是在特征下面的这段话,需要注意: All avaible features and modules are described in the ...

  4. 在Spring Framework中@Inject和@Autowired有什么区别? 在什么条件下使用哪一个?

    本文翻译自:What is the difference between @Inject and @Autowired in Spring Framework? Which one to use un ...

  5. 《Java Web高级编程——涵盖WebSockets、Spring Framework、JPA H

    2019独角兽企业重金招聘Python工程师标准>>> <Java Web高级编程--涵盖WebSockets.Spring Framework.JPA Hibernate和S ...

  6. Spring Framework 5.3.6、5.2.14 发布

    一个月前,小编刚给大家介绍过Spring Framework 5.3.5 的发布(紧随Java 16,Spring Framework 5.3.5 发布:涵盖JDK 16的支持!) 这才过来不到一个月 ...

  7. 紧随Java 16,Spring Framework 5.3.5 发布:涵盖JDK 16的支持!

    昨天小编刚给大家介绍过最新的Spring Boot 2.4.4.Spring Cloud 2020.0.2 发布内容,还没看过的小伙伴点这里:Spring Boot 2.4.4.Spring Clou ...

  8. Spring Framework 5.2.5 发布,增加对 Java 14 的支持

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://www.oschina.net ...

  9. Spring Framework 5.2 正式发布,14项新特性一览

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | xplanet 来源 | http://oschina.net/news/1103 ...

最新文章

  1. 视频直播技术详解(7)现代播放器原理
  2. Java反射机制概念及应用场景
  3. c语言字符指针清零,C语言中字符串的内存地址操作的相关函数简介
  4. 库克发文纪念苹果成立45周年:伟大使命还有待实现
  5. 数据:比特币和以太坊的证券产品规模已超过百亿美元
  6. 减少.NET应用程序内存占用的一则实践
  7. python之自动生成器(持续更新)
  8. makefile(详细讲解)
  9. python blp模型 估计_简述BLP模型
  10. RedHat 终端大小写不能切换问题
  11. Android 修改屏幕亮度
  12. EPICS -- sequencer第一部分--介绍
  13. 去除重复字母Python解法
  14. 区块链项目是如何盈利的
  15. 程序员的好代码长什么模样?
  16. 数据结构-矩阵-三角矩阵(Java语言)
  17. 安装交叉编译工具:arm-himix200-linux
  18. ]许多代码段,没准儿有你需要的 C++ Builder
  19. msvcp110.dll丢失怎么修复
  20. 腾讯欲成育碧最大股东/ 米哈游招NLP内容生成研究员/ AI发现四千余物种濒临灭绝...今日更多新鲜事在此...

热门文章

  1. Dubbo分布式日志追踪
  2. [vijos] 遭遇战
  3. 计算机应用能力1,计算机应用能力训练题(1)
  4. NUC980第一篇:开发环境的搭建以及官方源码编译
  5. 从单车到飞船的SQL优化之旅
  6. 【设计思考】内容过多,图上放不下怎么办?
  7. 用户画像系统设计调研
  8. 区块链- Merkle树
  9. 广义矩估计的一般步骤_广义矩估计.ppt
  10. HTML5基础知识整理(一)—— 新增标签和属性