spring依赖注入的原理与用法
创始人
2024-12-23 11:22:13
0次

一 点睛

控制反转和依赖注入在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 !

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...