Spring(15)——基于注解的配置

简介: 15 基于注解的配置 除了单独使用XML对Spring进行配置外,我们还可以使用注解的方式来配置对应的bean定义。如哪些class要被定义为bean,对应的bean需要注入哪些内容等。在Spring的配置中XML定义与注解定义是可以同时存在的。

15 基于注解的配置

除了单独使用XML对Spring进行配置外,我们还可以使用注解的方式来配置对应的bean定义。如哪些class要被定义为bean,对应的bean需要注入哪些内容等。在Spring的配置中XML定义与注解定义是可以同时存在的。

15.1 启用对注解的支持

如果需要使用注解来配置bean定义,首先我们需要启用Spring对注解的支持。最简单的方式就是在Spring的配置文件中引入context对应的命名空间,然后在其中定义一个<context:annotation-config/>即可。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

	<!-- 启用对注解的支持 -->
	<context:annotation-config/>

</beans>

定义好<context:annotation-config/>后,Spring将自动注册用于支持注解的bean定义,如CommonAnnotationBeanPostProcessorRequiredAnnotationBeanPostProcessorPersistenceAnnotationBeanPostProcessorAutowiredAnnotationBeanPostProcessor

15.2 @Required

@Required注解是用来标注在属性对应的set方法上的,表示在调用对应bean的初始化方法之后对应的属性不允许为空。该注解主要用来做一个标注检查作用,以防止我们在运行时使用对应的属性进行操作时出现空指针问题。

public class Hello {
	
	private World world;

	public World getWorld() {
		return world;
	}

	@Required
	public void setWorld(World world) {
		this.world = world;
	}
	
}

15.3 @Autowired

@Autowired注解用来表示自动注入的,其可以定义在属性上,set方法上,构造方法上等。使用其进行标注后Spring将自动注入对应的内容,默认是按照类型进行注入。使用了@Autowired标注进行注入的内容,默认是就是@Required的,即在对应bean完全初始化后对应的属性不能为空,必须进行注入。可以通过@Autowired的require属性指定进行指定,默认为true,即必须进行注入。

15.3.1 标注在属性上

public class Hello {
	
	@Autowired
	private World world;

}

15.3.2 设为非必须注入

public class Hello {
	
	@Autowired(required=false)
	private World world;

}

15.3.3 标注在set方法上

public class Hello {
	
	private World world;

	@Autowired
	public void setWorld(World world) {
		this.world = world;
	}
	
}

15.3.4 标注在普通方法上

Spring也支持通过普通方法进行自动注入,对应的普通方法可以接收一到多个参数。

public class Hello {
	
	private BeanA beanA;
	private World world;

	@Autowired
	public void inject(World world, BeanA beanA) {
		this.world = world;
		this.beanA = beanA;
	}

}

15.3.5 标注在构造方法上

@Autowired也可以标注在构造方法上,以完成对构造方法参数的自动注入。

public class Hello {
	
	private World world;

	@Autowired
	public Hello(World world) {
		this.world = world;
	}
	
}

但是有一点需要注意的是使用@Autowired进行注入的内容默认是@Required的,即不能为空的。当我们的bean类定义有多个构造方法时,Spring允许我们在多个构造方法上使用@Autowired进行标注,但是当在多个构造方法上标注@Autowired时,我们必须指定对应的required属性的值为false。如下这样两个构造方法都是@Autowired,且是@Required是不行的。

public class Hello {
	
	private World world;
	private BeanA beanA;

	@Autowired
	public Hello(World world) {
		this.world = world;
	}
	
	@Autowired
	public Hello(World world, BeanA beanA) {
		this.world = world;
		this.beanA = beanA;
	}
	
}

通过将对应的required属性设置为false后,我们的定义就又是合法的了。这个时候Spring将在bean容器中寻找对应构造方法参数类型对应的bean,然后将利用能满足最多构造方法参数进行注入的那个构造方法进行注入。如下示例当bean容器中既能寻找到World类型的bean,又能寻找到BeanA类型的bean时就将通过第二个构造方法进行注入,否则就是第一个了。

public class Hello {
	
	private World world;
	private BeanA beanA;

	@Autowired(required=false)
	public Hello(World world) {
		this.world = world;
	}
	
	@Autowired(required=false)
	public Hello(World world, BeanA beanA) {
		this.world = world;
		this.beanA = beanA;
	}

}

15.3.6 注入数组、集合类型等

@Autowired除了能注入单个的bean对象之外,还能注入数组类型、集合类型和key为String的Map类型的bean。当需要注入的是数组类型或集合类型时,Spring将在bean容器中寻找出所有对应类型的bean,然后将它们都作为其中的元素注入给对应的数组或集合,如果这些对应类型的bean是实现了Ordered接口的,那么Spring在将它们作为一个元素进行注入时还将根据Ordered接口的getOrder()方法的返回结果按从小到大的顺序进行添加。当需要自动注入的是一个key为String类型的Map类型时,Spring将在bean容器中寻找所有Map的value对应类型的bean,然后将它们以对应bean名称即bean定义中的beanName作为key注入到对应的Map中。对于key为非String类型的Map,Spring是不能进行自动注入的。

public class Hello {
	
	@Autowired
	private World[] worldArray;
	@Autowired
	private List<World> worldList;
	@Autowired
	private Set<World> worldSet;
	@Autowired
	private Map<String, World> worldMap;
	
}

15.3.7 注入ApplicationContext等

我们还可以通过@Autowired自动注入与Spring内部机制相关的内容,如BeanFactory、ApplicationContext、Environment等。

public class Hello {
	
	@Autowired
	private BeanFactory beanFactory;
	@Autowired
	private ApplicationContext applicationContext;
	@Autowired
	private ConfigurableApplicationContext configurableContext;
	@Autowired
	private Environment environment;
	@Autowired
	private ResourceLoader resourceLoader;
	@Autowired
	private ApplicationEventPublisher eventPublisher;
	@Autowired
	private MessageSource messageSource;
	@Autowired
	ResourcePatternResolver resourcePatternResolver;
	
}

 

 

目录
相关文章
|
1月前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
50 0
|
2月前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
129 3
|
1月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
50 0
|
3天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
39 14
|
1天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
15 6
|
2天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
28 3
|
2月前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
22天前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
36 4
|
1月前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
61 4
SpringBoot必须掌握的常用注解!
|
22天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
65 2
下一篇
DataWorks