java spring 理解

2021-03-10 17:29

阅读:267

标签:参数过长   反射   rgs   好的   还需要   顺序   为我   通过   tor   

1.spring IOC容器 其实就是 new 了一个 ApplicationContext 类对象。-》应用上下文对象。

2.应用上下文对象 实例化、配置,并管理 bean。

    所以上下文对象是 spring 的核心, 创建对象并把他们连接在一起,管理他们的生命周期。

--------------------

spring容器(应用上下文)通过我们提交的 POJO类 和 配置元数据(你懂得) 产生一个充分配置的(Fulled Configured)可使用的(ready for use)系统。

1.spring创建bean的几个手段(bean就是new好的对象)

  --通过@Component, @Service注解的方式 (默认都是通过无参的构造函数来实例化对象)

  --通过普通的XML方式(跟@Component注解一个道理)   《顺序:通过标签的class 属性得到一个class对象;然后通过class对象获取到对应的方法名称的Method对象;最后反射调用Method.invoke(null, args)》

  --通过@Configuration注解的方式

  --通过@Bean的方式

  --通过静态工厂方法 ????? (因为是静态方法,方法在执行时,不需要一个对象)

  --通过实例工厂方法的方式 ????

2.依赖注入的两种方式(实例化后的bean对象,注入才能成为spring bean。)

  --构造函数注入

  --Setter方法注入

       通过@Autowire指定使用哪个构造方法(有参无参)或哪个setter方法注入;

  

  首先明确一点,直接添加@Autowire注解到字段上,不需要提供 setter方法 也能完成注入。(spring 会通过反射获取当前Class中的private定义的字段,然后通过反射包的方法,File.set(Class, Privatekey) 这种方式完成注入)

  构造函数注入和setter方法注入可以混用,

    对于一些强制依赖,最好使用构造函数注入,对于一些可选依赖,我们可以采用setter方法注入。

    spring 团队推荐使用 构造函数的方式注入,,但是对于一些构造参数过长的构造函数,spring是 不推荐的。

~方法注入vs依赖注入:

  为什么有了依赖注入,还需要有方法注入的方式呢,方法注入解决了什么问题?   (我也看不懂,不知道)

  -依赖注入:什么是依赖? 一个对象的依赖其实就是自身的属性。spring中的依赖注入其实就是属性注入。

    我们知道一个对象由两部分组成:属性 + 行为。 可以说spring通过属性注入 + 方法注入的方式掌控整个bean。

    属性注入和方法注入都是spring提供给我们用来处理bean之间协作关系的手段。

    属性注入有两种方式:构造函数注入和 setter方法注入。

    方法注入需要依赖动态代理完成。(不是很懂)

    方法注入对属性注入进行了一定程度上的补充,因为属性注入的情况下,原型可能会失去原型的意义(为什么要使用方法注入)

3.  精确注入vs自动注入vs方法注入 (依赖注入又叫‘精确注入’,对应的还有‘自动注入’)

  --自动注入是针对整个对象,或者一整批对象。比如我们如果将autoService这个bean的注入模型设置为byName,spring会为我们去寻找所有符合要求的名字(通过setter方法)bean并注入到autoService 中,

  而精确注入这种方式,是我们针对对象中的某个属性,比如我们在autoService中的dmzService这个属性字段上添加了@AutoWired注解,代表我们要精确的注入dmzService这个属性。

  而方法注入主要是基于方法对对象进行注入。

  --我们通常所说***byName***,***byType***跟我们在前文中提到的注入模型中的byName,byType 完全不一样。通常我们说的***byName***,***byType***是spring寻找bean的手段。比如,当我们注入模型为constructor时,Spring 会先通过名称找符合要求的bean,这种通过名称寻找对应的bean的方式,我们可以成为byName. 我们可以将一次注入分为两个阶段,首先是寻找符合要求的bean,其次再将符合要求的bean注入。

3.1   补充spring1.4小结的剩余部分

  -- depends-on:

    我们首先要知道,默认情况下,spring在实例化容器中的对象时是按名称进行自然排序进行实例化的。比如我们现在有A,B,C三个对象,那么spring在实例化时会按照A,B,C这样的顺序进行实例化。

    但是,在某些情况下我们可能需要B在A之前完成实例化。这个时候,我们就需要使用depends-on这个属性了。

  -- lazy:

    默认情况下,spring会在容器启动阶段完成所有bean的实例化,以及一系列的生命周期回调。

    但是,某些情况下我们可能需要让某一个bean延迟实例化。这种情况下,我们需要用到lazy属性。

 

java spring 理解

标签:参数过长   反射   rgs   好的   还需要   顺序   为我   通过   tor   

原文地址:https://www.cnblogs.com/adam-jsongc/p/14145797.html


评论


亲,登录后才可以留言!