这篇文章主要讲解了“spring依赖注入的原理与用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“spring依赖注入的原理与用法”吧!
创新互联长期为上千多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为冷水滩企业提供专业的成都做网站、网站设计、外贸营销网站建设,冷水滩网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。一 点睛
控制反转和依赖注入在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依赖注入的原理与用法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联网站建设公司,,小编将为大家推送更多相关知识点的文章,欢迎关注!