本文重点介绍 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 注入以进行概念化。我们在下面的代码示例中对此进行了描述。
一个类指定一个依赖属性,即另一个类实例,并使用接受参数的构造函数实例化它。
公共 类 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。
这种技术与构造函数 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()。只需在此处更改类,
// 允许更改注入的类型
}
}
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习