标签:参数过长 反射 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注解一个道理) 《顺序:通过<bean>标签的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属性。
标签:参数过长 反射 rgs 好的 还需要 顺序 为我 通过 tor
原文地址:https://www.cnblogs.com/adam-jsongc/p/14145797.html