spring 控制反转和依赖注入的简单理解

3 篇文章 0 订阅

最近在学习springboot的时候发现我对spring不能抽象说出意思,证明当时并没理解spring只是限于使用,对于刚踏入这行的毕业生这是不行的,为了养成良好的习惯,坚持将工作中的问题总结发成博客供自己观看哈哈。

现在来看一个例子:

创建了一个functionservice类

public class FunctionService {

	public String sayHello(String word) {
		return "hello"+word;
	}
	
}

接下来我要使用这个方法

/**
 * @author pm_WeiYu
 *	functionservice 是此类的依赖
 */
public class UserFunctionService {
	
	FunctionService fs=new FunctionService();
	
	@Test
	public void log() {
		fs.sayHello("aaa");
	}
}

这时候可以称userfunctionservice 要依赖 functionservice。

但这样的代码我们可以发现耦合性很高,举个例子就是我们(userfunctionservice)要去市场(functionservice)买菜(sayhello),我们需要去不同的市场买不同的菜,这时候如果有个电商平台可以将这些资源整合起来,那我们直接去电商平台(spring)购买就行了。这就把控制权交给了spring(控制反转IOC)把菜的信息(实体bean)注入(DI)给我们(userfunctionservice)供我们使用。这样我们需要买菜去电商平台下单就行了。

接下是spring的做法(spring4.x 通过java类配置文件)

加注释service,这里可以选择@component @service @Repository @Controller

@Service
public class FunctionService {

	public String sayHello(String word) {
		return "hello"+word;
	}
	
}

编写一个配置类

/**
 * @author pm_WeiYu
 * spring配置类
 */

@Configuration
@ComponentScan("god.demo.service")
public class DiCongifg {

}

需要注入的类

/**
 * @author pm_WeiYu
 *	functionservice 是此类的依赖
 */

public class UserFunctionService {
	@Autowired
	FunctionService fs;
	
	@Test
	public void log() {
		AnnotationConfigApplicationContext acac=new AnnotationConfigApplicationContext(DiCongifg.class);
		FunctionService bean = acac.getBean(FunctionService.class);
		System.out.println(bean.sayHello("aaa"));

	}
}

使用关键字@Autowired将实体注入到其中具备其功能。

在这里需要注意一下,spring-cord 4.0.2版本以上使用AnnotationConfigApplicationContext会找不到。

可以看见现在创建对象的权力交给了spring,要使用的时候将需要注入的实体注入即可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值