Spring装配Bean

Spring装配Bean

1 依赖注入的方式(3类4种)
1.1 依赖注入
依赖注入DI是指程序运行过程中,若需要调用另一个对象协助时,无需在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序.依赖注入是目前最优秀的解耦方式,依赖注入让Spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的
实际环境中实现IoC容器的方式主要分为两大类,一类是依赖查找,依赖查找是通过资源定位,把对应资源查找回来;另一类就是依赖注入,而Spring主要使用的就是依赖注入.一般而言,依赖注入可以分为3种方式.
1.2 获取Bean对象的方式—getBean()
图解源码
image.png
使用较多的是前三种,具体使用的体会后面注入时会用到
1.3 通过全类名(反射)(最常用)
1.3.1 构造器注入(常用)
构造器注入依赖于构造方法实现,而构造方法可以是有参数的或者无参数的.Spring也可以采用反射的方式,通过使用构造方法来完成注入,构造器注入在 元素里声明属性,这就是构造器注入的原理.
为了让Spring完成对应的构造注入,我们首先需要创建一个JavaBean类,并创建构造方法,这样在使用构造器注入时就会通过对应信息通过反射的形式去创建对象.如果你对反射机制不熟悉,这篇文章会帮到你—>反射
创建一个User类
  image.png
在全局配置文件applicatioContext.xml中配置Bean信息,这里使用了4种常见的构造器注入的方式:无参构造|索引匹配,类型匹配,名称匹配
  image.png
测试方法
  image.png
使用构造器注入缺点也是很明显的,当参数比较少的时候,可读性还可以,但是参数很多时,这种方式就非常复杂了,这时候就应该考虑setter注入了
1.3.2 setter注入(常用)
setter注入时Spring中最主流的注入方式.它利用JavaBean规范所定义的setter方法来完成注入,灵活且可读性高.消除了使用构造器注入时出现多个参数的可能性.首先可以把构造方法声明为无参数的,然后使用setter注入为其设置对应的值,其实也是通过Java反射技术来实现的.
Setter方式注入也称为属性注入|设值注入,可以给指定Bean注入属性值或者依赖的对象,属性注入使用 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 子节点指定属性值.
属性注入是实际应用中最常用的注入方式
创建一个User类
  image.png
修改配置文件信息
  image.png
测试结果
  image.png
通过测试结果我们可以很明显看出,Spring"私底下"自动调用了对应属性的setter方法,spring会通过反射调用没有参数的构造方法生成对象,同时通过反射对应的setter注入配置的值.这是Spring最主要的方式,实际中应用最广方.
所以说,如果Bean类中定义了其他带参构造方法,那么必须手动声明一个无参构造器
1.4 通过静态工厂(很少用)
静态工厂顾名思义,就是通过调用静态工厂的方法来获取自己需要的对象,为了让Spring管理所有对象,不能直接通过"工厂类.静态方法()"来获取对象,而是依然通过Spring注入的形式获取.
在配置文件中需要使用factory-method属性指定工厂类中的静态方法
下面是代码示例
工厂类
  image.png
User类
  image.png
配置文件
  image.png
测试类
  image.png
1.5 通过实例工厂(很少用)
实例工厂的意思就是获取对象实例的方法不是静态的,所以需要先创建一个工厂类实例,然后在调用该工厂类的实例方法,通过该实例方法再创建我们需要的Bean实例
以下为代码示例
实例工厂类
  image.png
User类
  image.png
配置文件
  image.png
测试类
  image.png