这篇文章主要讲解了“spring依赖注入的原理与用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“spring依赖注入的原理与用法”吧!
一 点睛
控制反转和依赖注入在Spring环境下是等同的概念,控制反转是通过依赖注入实现的。所谓依赖注入指的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。
依赖注入的主要目的是为了解耦,体现一种组合的概念。如果你希望你的类具备某项功能的时候,是继承自一个具有次功能的父类好呢?还是组合另外一个具有此功能的类好呢?答案是不言而喻的,继承一个父类,子类和父类耦合了,组合另外一个类则使耦合度大大降低了。
Spring IoC 容器(ApplicationContext)负责创建Bean,并通过容器将功能Bean注入到你需要的Bean中。
Spring提供使用xml、注解、Java配置、groovy配置实现Bean的创建和注入。
无论是xml配置、注解还是Java配置,都被称为配置元数据,所谓元数据即描述数据的数据。元数据本身不具备任何可执行的能力,只有通过外界代码来对这些元数据进行解析后进行一些有意义的操作。Spring容器解析这些元数据进行Bean初始化,配置和管理依赖。
二 声明Bean的注解
@Component组件:没有明确的角色。 @Service:在业务逻辑层(service层)使用。 @Respository:在数据访问层(dao层)使用。 @Controller:在展现层(MVC->Spring MVC)使用。
三 注入Bean的注解
@Autowired:Spring提供的注解 @Inject:JSR-330提供的注解 @Resource:JSR-250提供的注解 @Autowired、@Inject、@Resource可注解set方法上或者属性上,一般习惯注解在属性上,优点是代码更少、层次更清晰。
四 实战
1 编写功能类的Bean
package com.wisely.highlight_spring4.ch2.di;import org.springframework.stereotype.Service;//使用@Service注解声明当前FunctionService类是Spring管理的一个Bean。//使用@Component、@Service、@Respository、@Controller是等效的,可//根据需要选择@Servicepublic class FunctionService { public String sayHello(String word){ return "Hello " + word +" !"; }}
2 使用功能类Bean
package com.wisely.highlight_spring4.ch2.di;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Service //使用@Service注解声明当前UseFunctionService类是Spring管理的一个Beanpublic class UseFunctionService { //使用@Autowired 将FunctionService的实体Bean注入到UseFunctionService中 //让UseFunctionService具备FunctionService的功能,此处使用JSR-330的Inject //注解或者JSR-250的@Resource注解等效 @Autowired FunctionService functionService; public String SayHello(String word){ return functionService.sayHello(word); }}
3 配置类
package com.wisely.highlight_spring4.ch2.di;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;@Configuration //@Configuration声明当前类是一个配置类。//使用@ComponentScan,自动扫描包下所有@Component、@Service、@Respository、@Controller//的类,并注册为Bean@ComponentScan("com.wisely.highlight_spring4.ch2.di")public class DiConfig {}
4 运行类
package com.wisely.highlight_spring4.ch2.di;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Main { public static void main(String[] args) { //使用AnnotationConfigApplicationContext作为Spring容器,接收 //一个配置类作为参数 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DiConfig.class); //获得声明配置UseFunctionService的Bean UseFunctionService useFunctionService = context.getBean(UseFunctionService.class); System.out.println(useFunctionService.SayHello("world")); context.close(); }}
五 测试
Hello world !
感谢各位的阅读,以上就是“spring依赖注入的原理与用法”的内容了,经过本文的学习后,相信大家对spring依赖注入的原理与用法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。