首页 > 其他分享 >Spring笔记

Spring笔记

时间:2023-05-23 22:13:12浏览次数:42  
标签:容器 BeanFactory 对象 Spring 笔记 scope 注解

Spring笔记

Spring提供两种容器类型:BeanFactory和ApplicationContext。

BeanFactory:

适用场景: 资源有限,并且功能要求不是很严格的场景。
为什么适用这个场景?默认采用 延迟初始化策略(lazy-load)。只有当客户端对象需要访问容器中的某个受管对象的时候,才对 该受管对象进行初始化以及依赖注入操作。

ApplicationContext:

适用场景:系统资源充足,并且要求更多的功能时候,选择这种容器。
更高级,拥有BeanFactory的所有支持。ApplicationContext所管理的对象,在该类型容器启动之后,默认全部初始化并绑定完成。所以这种容器要求更多的资源。

作为Spring提供的基本的IoC容器, BeanFactory可以完成作为IoCServiceProvider的所有职责,包括业务对象的注册和对象间依赖关系的 绑定。

拥有BeanFactory之后的生活:

之前我们的系统业务对象需要自己去“拉”(Pull)所依赖的业务对象, 有了BeanFactory之类的IoC容器之后,需要依赖什么让BeanFactory为我们推过来(Push)就行了。

BeanFactory的对象注册与依赖绑定方式:

主流的就是采用注解方式

BeanFactory的XML的管理方式:

XML格式的容器信息管理方式是Spring提供的最为强大、支持最为全面的方式。
统一的XMLXML格式:
在Spring 2.0版本之前,这种格式由 Spring提供的DTD 规定,也就是说,所有的Spring容器加载的XML配置文件的头部,都需要以下形式的DOCTYPE声明:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" ➥ "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>
    ... </beans>

从Spring 2.0版本之后,Spring在继续保持向前兼容的前提下,既可以继续使用DTD方式的DOCTYPE 进行配置文件格式的限定,又引入了 基于XML Schema的文档 声明。

xml元素介绍:

  1. <beans>之唯我独尊

    <beans>是XML配置文件中最顶层的元素,它下面可以包含0或者1个<description>和多个
    <bean>以及<import>或者<alias>。
    <beans>拥有相应的属性(attribute)对所辖的进行统一 的默认行为设置:

  • default-lazy-init。其值可以指定为true或者false,默认值为false。用来标志是否对所 有的进行延迟初始化。
  • default-autowire。可以取值为no、byName、byType、constructor以及autodetect。默 认值为no,如果使用自动绑定的话,用来标志全体bean使用哪一种默认绑定方式。
  • default-dependency-check。可以取值none、objects、simple以及all,默认值为none, 即不做依赖检查。
  • default-init-method。如果所管辖的按照某种规则,都有同样名称的初始化方法的 话,可以在这里统一指定这个初始化方法名,而不用在每一个上都重复单独指定。
  • default-destroy-method。与default-init-method相对应,如果所管辖的bean有按照某种
    规则使用了相同名称的对象销毁方法,可以通过这个属性统一指定。
  1. <description>

    通常情况下,该元素是省略的。

  2. <import>

    比如,如果A.xml中的定义可能依赖 B.xml中的某些定义,那么就可以在A.xml中使用将B.xml引入到A.xml,以类似于 的形式。

  3. <alias>

<beans>的属性:

?????

<beans>的scope:

scope用来声明容器中的对象所应该处的限定场景或者说该对象的存活时间,即容器在对象进入其 相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象。

Spring容器最初提供了两种bean的scope类型:singleton和prototype,但发布2.0之后,又引入了另 外三种scope类型,即request、session和global session类型。不过这三种类型有所限制,只能在Web应 用中使用。也就是说,只有在支持W eb应用的ApplicationContext中使用这三个scope才是合理的。

singleton类型bean定义,从容器启动,到它第一次被请求而实例化开始,只要容器不销毁或者退出,该类型bean的单一实例就会一直存活。

Spring基于注解的依赖注入:

@Autowired注解:按照类型进行匹配的,byType
@Qualifier注解:实际上是byName自动绑定的注解版
使用JSR250标注注解依赖关系:三个注解,@Resource、@PostConstruct、@PreDestory,其中,@Resource遵循的是byName自动绑定形式的行为准则。如果想某个方法在对象实例化之后被调用,以做某些准备工作,或者想在对象销毁之前调用某个 方法清理某些资源,那么就可以像我们这样,使用@PostConstruct和@PreDestroy来标注这些方法。

使用注解来表达对象之间的依赖注入关系!!

配置项:context:annotation-config

不管是@Autowired还是@Resource都需要添加相应的BeanPostProcessor到容器,那么我们 就可以在基于XSD的配置文件中使用一个&lt;context:annotation-config>配置搞定以上所有的 BeanPostProcessor配置。&lt;context:annotation-config> 不 但 帮 我 们 把 AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor注册到容器,同时还会把PersistenceAnnotationBeanPost- Processor和RequiredAnnotationBeanPostProcessor一并进行注册

classpath-sacnning功能介绍:

1. 解决的问题:有了注解可以不用在配置文件中明确指定依赖关系,但还是需要将相应对象的bean定义,一个个添加到ioc容器的配置文件中。
2. classpath-scanning功能可以从某一顶层 包(base package)开始扫描。当扫描到某个类标注了相应的注解之后,就会提取该类的相关信息,构 建对应的BeanDefinition,然后把构建完的BeanDefinition注册到容器。
3. classpath-scanning功能的触发是由<context:component-scan>决定的
4. <context:component-scan>默认扫描的注解类型是@Component。不过,在@Component语义基 础上细化后的@Repository、@Service和@Controller也同样可以获得<context:component-scan> 的青睐。

标签:容器,BeanFactory,对象,Spring,笔记,scope,注解
From: https://www.cnblogs.com/techgy/p/17400421.html

相关文章

  • 浅聊springmvc的执行流程
    核心组件是DispatcherServlet,所有的流程都是通过这个组件进行转发的,就好像一个转运中心1、用户发送请求至前端控制器DispatcherServlet。2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生......
  • Linux安装软件包(b站up主"码农论坛"所讲的做的笔记)
    在线安装/升级:yum-yinstall 软件包名删除软件:yum-yremove 软件包名如果不确定软件包名, 可以百度一下yum(YellowdogUpdater,Modified) 可以解决软件包的依赖关系, 下面另一种方法却没有 ----------------------------------------------------------------......
  • spring的IOC和AOP机制
    ioc(控制反转 inversionofcontrol)和aop(Aspect-OrientedProgramming)是spring的灵魂我的理解:控制反转就是说对原来对象的创建,也就是new一个对象,都是我们手动完成的,但是引入了ioc的思想之后,我们将对象的创建交给spring容器而不需要我们手动进行创建,我们要用的时候只需要将......
  • spring中@Autowired和@Resource的区别
    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。1、共同点两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。2、不同点(1)@Autowire......
  • Linux常用命令(b站up主"码农论坛"所讲的做的笔记)
    重启: reboot 或者 init6关机:init0 或者 halt清屏: clear查看IP:ipaddr查看时间:date修改时间: date-s"2020-5-212:22:22"复制:Ctrl+Insert 粘贴: Shift+Insert  这和WINDOWS上一样中止命令: Ctrl+c 意思是废除输入命令, 不执行查看当......
  • UE4学习笔记:Windows系统下如何在C++项目里调用第三方动态库
    本随笔介绍在Windows系统下,由UE4引擎创建的C++项目里如何实现调用第三方动态库的方法。随笔作者还在学习阶段,对UE4引擎的使用和理解还不是非常透彻,难免会在随笔内容里出现技术上或书写上的问题,如果出现了类似的问题欢迎在评论区或者私信讨论。 目录设置第三方库头文件的路......
  • 【听书笔记-0515】-《清单革命》
    认识清单这是自樊登读书后第二次听清单革命这本书,个人认为还是收获很大的。清单最大的魅力是使用去强制性外力督促人去注意细节,变得慎重。我们每个人都会犯错,通常是连个原因造成的:无知或者无能。无知是因为我们记忆力是有限资源,不可能知道、记住所有的知识; 无能是由于人的注意力也......
  • 【听书笔记-0611】-《一本书读懂股权架构》
    第一次听股权架构的讨论,豁然开朗,这本书确实是股权架构入门的一本好书!简单的讲解让我明白了金字塔架构、ab股、有限制合伙人这些平时生活人基本上耳熟能详却也不明所以概念,同时这本书里面关于阿里、小米、海底捞、土豆的案例,好像就是昨天发生的事情和新闻。这本书对于我最大的意义......
  • docker学习笔记:harbor私有仓库的搭建以及简单应用
    harbor私有仓库简介Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的DockerRegistry管理项目,它包括权限管理(RBAC)、LDAP、日志审......
  • docker学习笔记:Prometheus+cAdvisor搭建容器监控
    Prometheus+cAdvisor容器监控简介Prometheus官网Prometheus-Monitoringsystem&timeseriesdatabaseCNCF云原生基金会的第二个项目cAdvisorcAdvisor(ContainerAdvisor)是Google开源的一个容器监控工具,可用于对容器资源的使用情况和性能进行监控。它以守护进程方式......