Spring——bean的基本配置依赖注入

Posted 老赖的小弟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring——bean的基本配置依赖注入相关的知识,希望对你有一定的参考价值。

文章目录


前言

今天我想给大家随便说说的内容在下面

一、bean的基本配置

1.基本配置

看我圈里的东西,主要看id、class、name、value

1、id 属性:bean 的名称,在 IOC 容器中,bean 的名称必须是唯一的。
2、如果没有指定 id 属性,那么将会用 class 属性作为 bean 的名称。
3、Class 属性:类的全名称(包名+类名)

2.spring容器

在 Spring IOC 容器读取 Bean 配置创建 Bean 实例之前, 必须对它进行实例化. 只有
在容器实例化后, 才可以从 IOC 容器里获取 Bean 实例并使用(要获取 bean 就必须要先实
例化 IOC 容器,然后从容器中获取 bean)

Spring 提供了两种类型的 IOC 容器实现.
1、BeanFactory——> IOC 容器的基本实现
2、ApplicationContext——> 提供了更多的高级特性. 是 BeanFactory 的子接口
BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合都直接使用 ApplicationContext 而非底层的BeanFactory。无论使用何种方式, 配置文件是相同的。
ApplicationContext 的主要实现类:
ClassPathXmlApplicationContext:从 类路径下加载配置文件
FileSystemXmlApplicationContext: 从文件系统中加载配置文件
ConfigurableApplicationContext 扩展于 ApplicationContext,新增加两个主要方法:refresh()和 close(),让 ApplicationContext 具有启动、刷新和关闭上下文的能力,ApplicationContext 在初始化上下文时就实例化所有单例的 Bean。(默认 spirng 容器中的 bean 都是单例对象)WebApplicationContext 是专门为WEB 应用而准备的,它允许从相对于 WEB 根目录的路径中完成初始化工作

3.从 IOC 容器中获取 Bean

调用 ApplicationContext 的 getBean() 方法
getBean()方法的参数:
String:根据配置文件中的 ID 属性来获取 bean
Class:根据对象的类型来获取 bean。注意:如果只指定要返回的 Bean 的类型就想从 IOC容器中取得 Bean 的前提是该类型的 Bean 在 IOC 容器中只有一个,如果重复就会报错
我们写好的配置文件如下:

调用 ApplicationContext 的 getBean() 方法
第一步创建ioc容器
第二步调用getBean方法

二、依赖注入

所谓依赖注入:通过配置文件,构造方法等向 bean 的属性中注入值。在 Spring 中依赖注入有三种方式。通过属性注入;通过构造方法注入;通过工厂方法注入(强烈不推荐使用)

1.属性注入(为了大家理解光文字没意思,加上代码图片)

属性注入即通过 setter 方法注入 Bean 的属性值或依赖的对象
属性注入使用 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 子节点指定属性值。属性注入是实际应用中最常用的注入方式

1.1创建一个测试需要用的cat类

代码如下(cat类):

package com.cc;

public class Cat 
    // 就给一个名字属性
    private String name;
    //无参构造函数
    public Cat() 

    
    //有参构造函数
    public Cat(String name) 
        this.name = name;
    
    //get/set方法
    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

    @Override
    public String toString() 
        return "Cat" +
                "name='" + name + '\\'' +
                '';
    


1.2配置resources 文件夹下 spring-2.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="cat" class="com.cc.Cat">
        <property name="name" value="大橘"></property>
    </bean>
</beans>

在上面我向 cat这个 bean 的 name 属性中注入值“大橘”

1.3测试

代码如下(测试):

import com.cc.Cat;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class CatSpringTest 
    public static void main(String[] args) 
        //1、创建 ioc 容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-2.xml");
        //2、从容器中获取 bean
        Cat cat = (Cat) ctx.getBean("cat");
        //3、调用方法
        System.out.println(cat);
    

代码如下(输出):

信息: Loading XML bean definitions from class path resource [spring-2.xml]
Catname='大橘'

Process finished with exit code 0

1.构造方法注入(用得不多)

构造方法的注入有好几种方法,比如原生的使用构造方法注入值,还有按照 index 来匹配构造方法的参数 、按照类型匹配输入参数(麻烦不推荐使用)、通过参数名称来匹配输入参数,其实都是xml配置文件发生一点改变如下图圈中位置,继续看下面就知道了,这里的测试类就将就用上面的cat类

1.1构造方法注入值

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="cat1" class="com.cc.Cat">
        <constructor-arg value="小花"></constructor-arg>
    </bean>
</beans>

1.2按照 index 来匹配构造方法的参数

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="cat2" class="com.cc.Cat">
        <constructor-arg value="小花" index="0"></constructor-arg>
    </bean>
</beans>

1.3通过参数名称来匹配输入参数

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="cat3" class="com.cc.Cat">
        <constructor-arg value="小白" name="name"></constructor-arg>
    </bean>
</beans>

至于测试都是如上面的一样
1、建立IOC容器
2、getBean


总结

咱们开始学习知识嘛,就得把书读薄,捡重要的常用的学,那样才学的轻松一点,免生厌烦之感,spring的东西还是很多的。

以上是关于Spring——bean的基本配置依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

深入剖析 Spring 框架的 BeanFactory

Spring——bean的基本配置依赖注入

Spring——bean的基本配置依赖注入

SPRING01_概述配置文件bean实例化依赖注入的方式依赖注入的数据类型分模块开发API使用

Spring -- Spring配置文件详解(Bean实例化的三种方式IoC(控制反转) 与 DI(依赖注入)依赖注入详解)

Spring框架bean的配置:基于注解的配置,Autowired 自动装配 Bean,泛型依赖注入