专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 spring中不同类型的的bean注入

spring中不同类型的的bean注入

更新时间:2022-08-29 10:18:39 来源:赢咖4 浏览1122次

概述

本文重点介绍 Spring 中的 bean 注入类型。从广义上和历史上看,它支持两种类型的 bean 注入:

1.基于构造函数的 Bean 注入

2.基于 Setter 的 Bean 注入

Spring 提供了各种方法来定义 bean 和配置依赖注入,使用:

XML 配置文件

@Autowired注解

Java 代码(即配置类,只有注解)

在基于 XML 的配置中,这是最古老的方式,我们必须定义和配置所有的 bean。然后 Spring 的容器 Bean Factory 加载这个 XML 并应用配置。Java 注释提供与 XML 文件配置相同的功能。但改用注解,例如@ Autowired、@ Service 、 @ Component等,也更简单。基于 Java 代码的配置类似于 XML 配置。但是使用注解、配置类和方法来配置 Java 代码中的所有内容。

本文将仅关注 Spring 中基于 Java 代码的 bean 注入以进行概念化。我们在下面的代码示例中对此进行了描述。

基于构造函数的 Bean 注入

一个类指定一个依赖属性,即另一个类实例,并使用接受参数的构造函数实例化它。

公共 类 HourlyNews {
    私人WeatherUpdate 天气更新;
    公共 HourlyNews(天气更新更新) {
        天气更新 = 更新;
    }
    // 新闻的其他方法
}

HourlyNews类还提供天气新闻更新。它通过指定对WeatherUpdate接口的依赖来实现良好的、松散耦合的长期合同。

公共 接口 WeatherUpdate {
    公共字符串getUpdate () ;
}

LocalWeatherUpdate类实现WeatherUpdate接口并提供本地天气更新:

public  class  LocalWeatherUpdate 实现 WeatherUpdate  {
     @Override 
    public String getUpdate ()  {
         return  "凉爽多云,22 摄氏度" ;
    }
}

在上面的依赖规范之后,我们必须定义我们的 bean 并使用 Java 配置文件AppConfig.java配置 Spring 以进行注入:

@Configuration 
public  class  AppConfig  {
     @Bean 
    public HourlyNews hourlyNews ()  {
        HourlyNews hourlyNews = new HourlyNews(weatherUpdate());
        返回每小时新闻;
    }
    @Bean 
    public WeatherUpdate weatherUpdate ()  {
         return  new LocalWeatherUpdate();
        // 或 RestWeatherUpdate()。只需在此处更改类,
        // 允许更改注入的类型
    }
}

@Configuration注解将其表示为 Spring 的配置类。可以有一个或多个配置类。然后,我们使用@Bean注解为LocalWeatherUpdate和HourlyNews类定义了两个 bean 。请注意 - 在HourlyNews类定义中,我们将依赖项指定为接口WeatherUpdate。但是我们只在配置 bean 时才具体化——在方法中作为LocalWeatherUpdate。

基于 Setter 的 Bean 注入

这种技术与构造函数 bean 注入非常相似。除了不使用类构造函数,我们使用 setter 方法进行 bean 注入。所以我们上面的示例代码将大部分保持不变。但是需要做两处改动:一处是在HourlyNews类中,即我们将移除构造函数方法并添加一个默认构造函数和一个 setter 方法。另一个在配置类中。

公共 类 HourlyNews {
    私人WeatherUpdate 天气更新;
    公共 每小时新闻() {}
    公共 无效 setWeatherUpdate ( WeatherUpdate weatherUpdate ) {
         this .weatherUpdate = weatherUpdate;
    }
    // 新闻的其他方法
}

AppConfig.java文件更改:

@Configuration 
public  class  AppConfig  {
     @Bean 
    public HourlyNews hourlyNews ()  {
        每小时新闻 hourlyNews = new HourlyNews();
        hourlyNews.setWeatherUpdate(weatherUpdate());
        返回每小时新闻;
    }
    @Bean 
    public WeatherUpdate weatherUpdate ()  {
         return  new LocalWeatherUpdate();
        // 或 RestWeatherUpdate()。只需在此处更改类,
        // 允许更改注入的类型
    }
}

 

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>