01-依赖注入DI

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.总之要统一。

<!-- 定义变量 -->
	<properties>
		<java.version>1.7</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.1.6.RELEASE</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>${java.version}</source>
					<target>${java.version}</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
2、创建功能类Bean
package com.eleven.di;

import org.springframework.stereotype.Service;

@Service // @Service注解声明当前ElevenService类是Spring管理的一个Bean
public class ElevenService {

	public String sayLoveMe(String eleven) {
		return "Love " + eleven + " !";
	}

}
3、使用功能类Bean
package com.eleven.di;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service // @Service该注解声明当前UseFunctionService类是Spring管理的一个Bean
public class UseFunctionService {
	@Autowired // @Autowired该注解表示:将ElevenService注入到UseFunctionService类中
	private ElevenService elevenService;

	public String SayLoveEleven(String eleven) {
		return elevenService.sayLoveMe(eleven);
	}

}
4、配置类
package com.eleven.di;

import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.ComponentScan;

@Configurable // 该注解声明当前类是一个配置类
@ComponentScan("com.eleven") // 自动扫描包下的所有注解,并注册为Bean
public class DiConfig {

}
5、运行输出
package com.eleven.di;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
	public static void main(String[] args) {
		// 使用AnnotationConfigApplicationContext作为Spring的容器,接收输入一个DiConfig配置类作为参数
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DiConfig.class);
		// 拿到声明为Bean的ElevenService类
		ElevenService elevenService = context.getBean(ElevenService.class);
		// 传入参数"伊莱文",并打印输出
		System.out.println(elevenService.sayLoveMe("伊莱文"));
		// 关闭容器的连接
		context.close();
	}

}

在这里插入图片描述

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

1、创建一个功能类Bean
package com.eleven.javaconfig;

// 此处没有写注解@Service声明Bean
public class ElevenService {

	public String SayLoveMe(String eleven) {
		return "Love " + eleven + " !";
	}

}
2、使用功能类Bean
package com.eleven.javaconfig;

// 此处依旧没有使用注解@Service声明Bean
public class UseElevenService {
	// 此处没有使用注解@Autowired注入Bean
	ElevenService elevenService;

	public void setEleveService(ElevenService elevenService) {
		this.elevenService = elevenService;
	}

	public String SayLoveMe(String eleven) {
		return elevenService.SayLoveMe(eleven);
	}
}
3、配置类
package com.eleven.javaconfig;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration // 声明当前类是一个配置类
public class JavaConfig {
	@Bean // 使用该注解声明当前类ElevenService的返回值类型是一个Bean,Bean的名称就是方法名
	public ElevenService elevenService() {
		return new ElevenService();
	}

	@Bean
	public UseElevenService useElevenService() {
		UseElevenService useElevenService = new UseElevenService(); //
		useElevenService.setEleveService(elevenService()); // 注入UseElevenService的时候,直接调用UseElevenService方法
		return useElevenService;
	}

}
4、运行输出
package com.eleven.javaconfig;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
		UseElevenService useElevenService = context.getBean(UseElevenService.class);
		System.out.println(useElevenService.SayLoveMe("伊莱文"));
		context.close();
	}

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值