01-依赖注入DI

谁践踏了优雅 2021-09-23 13:50 502阅读 0赞

Spring-01-依赖注入DI

参考学习:

欢迎大家访问学习:
Spring学习:https://how2j.cn/k/spring/spring-ioc-di/87.html?p=36286
在这里插入图片描述

一、介绍

依赖注入:Spring容器负责创建和维护对象之间的依赖关系。

其过程指的是:SpringIoC容器会创建一个Bean,并通过该容器将功能类Bean注入到你所需要的Bean中。

二、需求

演示基于注解方式Bean的初始化和依赖注入。

三、演示

1、新建一个Maven项目

右键maven选择Update Maven Project选择OK。

右键Properties,修改Java Build Path,将JDK选择(我的是1.8)、Java Compiler选择1.8、Project Facets选择1.8.总之要统一。

  1. <!-- 定义变量 -->
  2. <properties>
  3. <java.version>1.7</java.version>
  4. </properties>
  5. <dependencies>
  6. <dependency>
  7. <groupId>org.springframework</groupId>
  8. <artifactId>spring-context</artifactId>
  9. <version>4.1.6.RELEASE</version>
  10. </dependency>
  11. </dependencies>
  12. <build>
  13. <plugins>
  14. <plugin> <groupId>org.apache.maven.plugins</groupId>
  15. <artifactId>maven-compiler-plugin</artifactId>
  16. <version>2.3.2</version>
  17. <configuration>
  18. <source>${ java.version}</source>
  19. <target>${ java.version}</target>
  20. </configuration>
  21. </plugin>
  22. </plugins>
  23. </build>
  24. </project>

2、创建功能类Bean

  1. package com.eleven.di;
  2. import org.springframework.stereotype.Service;
  3. @Service // @Service注解声明当前ElevenService类是Spring管理的一个Bean
  4. public class ElevenService {
  5. public String sayLoveMe(String eleven) {
  6. return "Love " + eleven + " !";
  7. }
  8. }

3、使用功能类Bean

  1. package com.eleven.di;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Service;
  4. @Service // @Service该注解声明当前UseFunctionService类是Spring管理的一个Bean
  5. public class UseFunctionService {
  6. @Autowired // @Autowired该注解表示:将ElevenService注入到UseFunctionService类中
  7. private ElevenService elevenService;
  8. public String SayLoveEleven(String eleven) {
  9. return elevenService.sayLoveMe(eleven);
  10. }
  11. }

4、配置类

  1. package com.eleven.di;
  2. import org.springframework.beans.factory.annotation.Configurable;
  3. import org.springframework.context.annotation.ComponentScan;
  4. @Configurable // 该注解声明当前类是一个配置类
  5. @ComponentScan("com.eleven") // 自动扫描包下的所有注解,并注册为Bean
  6. public class DiConfig {
  7. }

5、运行输出

  1. package com.eleven.di;
  2. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  3. public class Main {
  4. public static void main(String[] args) {
  5. // 使用AnnotationConfigApplicationContext作为Spring的容器,接收输入一个DiConfig配置类作为参数
  6. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DiConfig.class);
  7. // 拿到声明为Bean的ElevenService类
  8. ElevenService elevenService = context.getBean(ElevenService.class);
  9. // 传入参数"伊莱文",并打印输出
  10. System.out.println(elevenService.sayLoveMe("伊莱文"));
  11. // 关闭容器的连接
  12. context.close();
  13. }
  14. }

在这里插入图片描述

四、基于Java配置的方式(推荐)

1、创建一个功能类Bean

  1. package com.eleven.javaconfig;
  2. // 此处没有写注解@Service声明Bean
  3. public class ElevenService {
  4. public String SayLoveMe(String eleven) {
  5. return "Love " + eleven + " !";
  6. }
  7. }

2、使用功能类Bean

  1. package com.eleven.javaconfig;
  2. // 此处依旧没有使用注解@Service声明Bean
  3. public class UseElevenService {
  4. // 此处没有使用注解@Autowired注入Bean
  5. ElevenService elevenService;
  6. public void setEleveService(ElevenService elevenService) {
  7. this.elevenService = elevenService;
  8. }
  9. public String SayLoveMe(String eleven) {
  10. return elevenService.SayLoveMe(eleven);
  11. }
  12. }

3、配置类

  1. package com.eleven.javaconfig;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. @Configuration // 声明当前类是一个配置类
  5. public class JavaConfig {
  6. @Bean // 使用该注解声明当前类ElevenService的返回值类型是一个Bean,Bean的名称就是方法名
  7. public ElevenService elevenService() {
  8. return new ElevenService();
  9. }
  10. @Bean
  11. public UseElevenService useElevenService() {
  12. UseElevenService useElevenService = new UseElevenService(); //
  13. useElevenService.setEleveService(elevenService()); // 注入UseElevenService的时候,直接调用UseElevenService方法
  14. return useElevenService;
  15. }
  16. }

4、运行输出

  1. package com.eleven.javaconfig;
  2. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  3. public class Main {
  4. public static void main(String[] args) {
  5. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
  6. UseElevenService useElevenService = context.getBean(UseElevenService.class);
  7. System.out.println(useElevenService.SayLoveMe("伊莱文"));
  8. context.close();
  9. }
  10. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,502人围观)

还没有评论,来说两句吧...

相关阅读

    相关 DI依赖注入

    在DI(依赖注入)中,能注入的数据是有三种类型的: 1、基本类型和String 2、其他bean类型(在配置文件中或者注解配置过的bean对象) 3、复杂类型/集

    相关 Spring---DI依赖注入

    上一篇介绍了关于IOC的内容:IOC称为控制反转,简单来说就是讲对象的创建的权利以及对象的生命周期的管理过程交给Spring容器来管理,从此在开发的过程中不需要关注对象的创建以

    相关 Spring依赖注入DI

    开头语:本文是我整理网上各种资料后整合而成的一篇文章。文中涉及到了代码重构、面向接口编程、持久化和工厂设计模式的内容。 1. Spring是什么?

    相关 依赖注入2-DI

    IoC主要体现了这样一种设计思想:通过将一组通用流程的控制从应用转移到框架之中以实现对流程的复用,同时采用“好莱坞原则”是应用程序以被动的方式实现对流程的定制。我们可以采用若干