Spring基础篇:基于注解的依赖查找和依赖注入(IOC)

简介: 基于注解的依赖查找和依赖注入(IOC)
话说上回,上篇文章介绍了使用XML的方式做依赖注入。

快速回顾:主要是使用配置文件实现属性成员的依赖注入,这样做的好处是:解耦

<bean id="person" class="juejin.di.bean.Person">
    <property name="pet" ref="dog"></property>
    <property name="name" value="Chengyunlai"></property>
</bean>

该篇再分享一下注解的依赖注入以及依赖查找方面的内容。

注解版的依赖查找

回想一下,注解版定义bean是在配置类(@Configuration)中使用@Bean标注方法,方法通过New的方式得到需要的bean

@Bean
public Person person(){
    Person person = new Person();
    return person;
}
  • 对标XML的普通属性注入(value):

其实直接调用该类的setter方法即可。

    Person person = new Person();
    person.setName("Chengyunai"); //setter注入
    return person;

这时候会产生一个问题,虽然是调用了setter注入,但是这还是在代码中,属于硬编码的范围,但是Spring提供了读取外部properties文件的配置。见我这篇文章 Spring基础篇:利用注解将外部Properties属性注入到Bean中的方法 - 掘金 (juejin.cn)

这样就解决了硬编码的问题,同时做了代码解耦。

  • 对标XML的类成员属性注入(ref)

其实也非常简单,主要还是调用setter方法,但是注入的内容是Spring管理的bean

@Bean
public Pet pet(){
    Pet dog = new Dog();
    return dog;
}

上面的代码,是Spring管理了一个Pet类,我们在Person中注入时应该是这样,直接调用定义好的方法即可。

@Bean
public Person person(){
    Person person = new Person();
    person.setPet(pet()); // 直接调用上面定义的方法即可
    return person;
}

依赖查找

依赖查找其实是主动声明出Spring容器的上下文,声明后向容器中去查询内容。
它的核心内容是:

这个例子以读取配置文件的方式;读取配置类则使用:AnnotationConfigApplicationContext

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("xxx.xml");
Person person = ctx.getBean(Person.class);

它有两个动作:

  1. 读取配置文件,通过方法得到上下文。
  2. 通过上下文拿到其中的bean

注意,通常依赖查找是直接查出Spring管理的bean,它无法做一些属性注入的内容,所以配置时应该要将依赖注入和依赖查找搭配使用。相比较的话,依赖注入还有很多其他的使用方法,可以实现类与类之间的关联,所以依赖注入会用的更频繁。

目录
相关文章
|
5天前
|
运维 Java 程序员
Spring5深入浅出篇:基于注解实现的AOP
# Spring5 AOP 深入理解:注解实现 本文介绍了基于注解的AOP编程步骤,包括原始对象、额外功能、切点和组装切面。步骤1-3旨在构建切面,与传统AOP相似。示例代码展示了如何使用`@Around`定义切面和执行逻辑。配置中,通过`@Aspect`和`@Around`注解定义切点,并在Spring配置中启用AOP自动代理。 进一步讨论了切点复用,避免重复代码以提高代码维护性。通过`@Pointcut`定义通用切点表达式,然后在多个通知中引用。此外,解释了AOP底层实现的两种动态代理方式:JDK动态代理和Cglib字节码增强,默认使用JDK,可通过配置切换到Cglib
|
11天前
|
Java 测试技术 开发者
Spring IoC容器通过依赖注入机制实现控制反转
【4月更文挑战第30天】Spring IoC容器通过依赖注入机制实现控制反转
21 0
|
22小时前
|
JSON 前端开发 Java
【JAVA进阶篇教学】第七篇:Spring中常用注解
【JAVA进阶篇教学】第七篇:Spring中常用注解
|
3天前
|
JavaScript Java 开发者
Spring Boot中的@Lazy注解:概念及实战应用
【4月更文挑战第7天】在Spring Framework中,@Lazy注解是一个非常有用的特性,它允许开发者控制Spring容器的bean初始化时机。本文将详细介绍@Lazy注解的概念,并通过一个实际的例子展示如何在Spring Boot应用中使用它。
16 2
|
3天前
|
缓存 Java 开发工具
【spring】如何解决循环依赖
【spring】如何解决循环依赖
7 0
|
5天前
|
前端开发 Java
SpringBoot之自定义注解参数校验
SpringBoot之自定义注解参数校验
15 2
|
11天前
|
安全 Java 开发者
在Spring框架中,IoC和AOP是如何实现的?
【4月更文挑战第30天】在Spring框架中,IoC和AOP是如何实现的?
21 0
|
11天前
|
XML Java 程序员
什么是Spring的IoC容器?
【4月更文挑战第30天】什么是Spring的IoC容器?
19 0
|
11天前
|
Java Spring
springboot自带的@Scheduled注解开启定时任务
springboot自带的@Scheduled注解开启定时任务
|
11天前
|
存储 缓存 Java
【Spring系列笔记】依赖注入,循环依赖以及三级缓存
依赖注入: 是指通过外部配置,将依赖关系注入到对象中。依赖注入有四种主要方式:构造器注入、setter方法注入、接口注入以及注解注入。其中注解注入在开发中最为常见,因为其使用便捷以及可维护性强;构造器注入为官方推荐,可注入不可变对象以及解决循环依赖问题。本文基于依赖注入方式引出循环依赖以及三层缓存的底层原理,以及代码的实现方式。
22 0