Spring中的部分注解

Spring中的注解

1.@Component

XML: 声明一个bean交于spring容器管理

指示一个注释类是一个“组件”。

当使用基于注释的配置和类路径扫描时,这些类被认为是自动检测的候选类。

2.@Autowired

XML:ref属性 输入赋值(DI机制)

作用:
默认按照bean的类型注入数据,如果类型相同,则按名称注入
属性:
required:指定目标bean是否必须存在于spring的IOC容器(true必须存在;false:可以不存在;默认true)

个人建议:加在构造函数或者setter方法上面

	将构造函数、字段、setter方法或配置方法标记为由Spring的依赖项注入工具自动实现的。这是JSR-330 javax.inject的替代方法。注入注释,添加required-vs-optional语义。
	只能有一个给定的bean类的构造函数声明该注释的“需要”属性设置为true,表示构造函数作为一个Spring bean时自动装配。此外,如果“required”属性被设置为true,那么只有一个构造函数可以用@Autowired注解。如果多个非必需的构造函数声明注释,它们将被视为自动装配的候选函数。通过在Spring容器中匹配bean可以满足的依赖关系最多的构造函数将被选择。如果没有一个候选函数可以满足,那么将使用主/默认构造函数(如果存在)。如果一个类只声明了一个构造函数,那么它将始终被使用,即使没有注释。带注释的构造函数不必是公共的。
	字段是在构建bean之后,在调用任何配置方法之前注入的。这样的配置字段不必是公开的。
	配置方法可以有一个任意的名称和任意数量的参数;这些参数中的每一个都将通过Spring容器中的匹配bean自动实现。Bean属性设置方法实际上只是这种通用配置方法的一个特例。这样的配置方法不必是公开的。
	对于多参数构造函数或方法,` required'属性适用于所有参数。单个参数可以声明为java -8样式的java.util。可选的,或者在Spring Framework 5.0中也作为@Nullable或Kotlin中的非空参数类型,覆盖基本的required语义。
	以java.util为例。或java.util集合。映射依赖类型,容器自动生成与声明值类型匹配的所有bean。为此,映射键必须声明为类型字符串,将其解析为相应的bean名称。这样一个容器提供的集合将是有序的,考虑到org.springframework.core.Ordered/org.springframework.core.annotation。目标组件的顺序值,否则遵循其在容器中的注册顺序。或者,单个匹配的目标bean也可以是一般类型的集合或映射本身,这样就可以被注入。
	注意,实际的注入是通过BeanPostProcessor执行的,这意味着您不能使用@Autowired将引用注入到BeanPostProcessor或BeanFactoryPostProcessor类型中。

3.标签 context:component-scan

	启动自动扫描机制,使用base-package属性指定扫描包位置
	通常情况下我们在创建spring项目的时候在xml配置文件中都会配置这个标签,配置完这个标签后,spring就会去自动扫描base-package对应的路径或者该路径的子包下面的java文件,如果扫描到文件中带有@Component这个注解的类,则把这些类注册为bean ,如果在类的属性上有@Autowired注解,我们就会按属性的类型去找对应的bean去注入

4.@Controller

XML:< bean id="" class=""> 声明bean交于SpringIOC管理,指示一个带注释的类是一个“控制器”(例如一个web控制器)。

	这个注释作为@Component的专门化,允许通过类路径扫描自动检测实现类。它通常与基于org.springframework.web.bind.annotation的带注释的处理程序方法结合使用。RequestMapping注释。

5.@Service

XML:< bean id="" class=""> 声明bean交于SpringIOC管理,指示一个带注释的类是一个“服务”,最初由域驱动设计(Evans, 2003)定义为“作为接口提供的操作,独立于模型中,没有封装状态。”

	还可能表明类是“业务服务Facade”(从核心J2EE模式的角度来看),或者类似的东西。这个注释是一个通用的构造型,单个团队可以适当地缩小他们的语义和使用。
	这个注释作为@Component的专门化,允许通过类路径扫描自动检测实现类。

6.@Repository

XML:< bean id="" class=""> 声明bean交于SpringIOC管理,指示一个带注释的类是一个“存储库”,最初由域驱动设计(Evans, 2003)定义为“一种模拟对象集合的封装存储、检索和搜索行为的机制”。

	实现传统Java EE模式(如“数据访问对象”)的团队也可以将这个原型应用到DAO类中,尽管在这样做之前应该注意理解数据访问对象和ddd风格存储库之间的区别。这个注释是一个通用的构造型,单个团队可以适当地缩小他们的语义和使用。
	当与PersistenceExceptionTranslationPostProcessor一起使用时,这样注释的类就可以用于Spring DataAccessException转换。为了工具、方面等目的,注释类在整个应用程序体系结构中的角色也被阐明。
	在spring2.5中,这个注释还作为@Component的专门化,允许通过类路径扫描自动检测实现类。

7.@Scope

xml:scope=“singleton/prototype” 指明使用单例还是多例

	当与@Component一起用作类型级注释时,@Scope表示要为注释类型的实例使用的作用域的名称。
	当作为方法级注释与@Bean一起使用时,@Scope表示方法返回的实例要使用的作用域的名称。
	@Scope注释仅在具体bean类(对于带注释的组件)或工厂方法(对于@Bean方法)上自省。与XML bean定义相反,不存在bean定义继承的概念,而且类级别的继承层次结构与元数据目的无关。
	在这个上下文中,作用域意味着实例的生命周期,比如单例、原型等等。可以使用可在ConfigurableBeanFactory和WebApplicationContext接口中使用的SCOPE_*常量引用Spring中提供的开箱即用的作用域。
	若要注册其他自定义作用域,请参见CustomScopeConfigurer。

8.@PostContruct

xml: 类似于 init-method 这个注释是在package javax.annotation包中的

9.@PreDestroy

xml:类似于 destroy-method 这个注释是在package javax.annotation包中的

10.@Qualifier

xml: ref="自定义类型"

作用:
与@Autowired注解一起使用,指定在按照bean类型注入的基础上,再按照bean的名称注入
属性:
value:指定bean的名称

	在自动装配时,这个注释可以在字段或参数上用作候选bean的限定符。它还可以用于注释其他自定义注释,然后这些自定义注释又可以用作限定符。

11.@Resource

xml: ref="自定义类型" 这个注释是在package javax.annotation包中的

作用:
默认按照bean的名称注入数据,如果同一个接口有多个实现,可以通过指定属性进行注入
属性:
name:指定bean的名称注入数据
type:指定bean的类型注入数据

	资源注释标记应用程序需要的资源。此注释可应用于应用程序组件类,或应用于组件类的字段或方法。当将注释应用于字段或方法时,容器将在组件初始化时将请求资源的实例注入到应用程序组件中。如果该注释应用于组件类,则该注释声明一个应用程序将在运行时查找的资源。
	即使该注释没有标记为Inherited,部署工具也需要检查任何组件类的所有超类,以发现该注释在所有超类中的所有用法。所有这些注释实例都指定应用程序组件所需的资源。注意,这个注释可能出现在超类的私有字段和方法上;在这些情况下,容器也需要执行注入。

12.@Value

xml:value="基础数据类型" 基本数据类型注入

	在字段或方法/构造函数参数级别上的注释,指示受影响参数的默认值表达式。
	通常用于表达式驱动的依赖项注入。也支持处理程序方法参数的动态解析,例如在Spring MVC中。
	一个常见的用例是使用#{systemProperties分配默认字段值。myProp}风格表达式。
	@Value注释的实际处理是由BeanPostProcessor执行的,这意味着您不能在BeanPostProcessor或BeanFactoryPostProcessor类型中使用@Value。

13.@PropertySource

xml:< context:property-placeholder > 导入外部资源文件

14. @ComponentScan

xml:< context:component-scan > 扫描包,约定大于配置

15. @Bean

xml:jdbcTemplate、druidDataSource非自定配置类

声明bean装配到SpringIOC中

16. @Configuration

替代bean.xml

声明配置类,代替bean.xml的作用

17. @import

	指示要导入的一个或多个组件类—通常是@Configuration类。
	提供与Spring XML中的<import/>元素等效的功能。允许导入@Configuration类,ImportSelector和ImportBeanDefinitionRegistrar实现,以及常规的组件类(从4.2开始;类似于AnnotationConfigApplicationContext.register)。
	在导入的@Configuration类中声明的@Bean定义应该通过使用@Autowired注入来访问。bean本身可以是autowired,或者声明bean的配置类实例可以是autowired。后一种方法允许显式的、ide友好的在@Configuration类方法之间导航。
	可以在类级别声明,也可以作为元注释声明。
	如果需要导入XML或其他非@ configuration bean定义资源,则使用@ImportResource注释。

18.@RunWith

替换底层运行器

19.@ContextConfiguration

	@ContextConfiguration定义了用于确定如何为集成测试加载和配置ApplicationContext的类级元数据。
	在Spring 3.1之前,只支持基于路径的资源位置(通常是XML配置文件)。从Spring 3.1开始,上下文加载器可以选择支持基于路径或基于类的资源。从Spring 4.0.4开始,上下文加载器可以选择同时支持基于路径和基于类的资源。因此,可以使用@ContextConfiguration来声明基于路径的资源位置(通过location或value属性)或组件类(通过classes属性)。但是请注意,SmartContextLoader的大多数实现只支持一种资源类型。在Spring 4.1中,基于路径的资源位置可以是XML配置文件或Groovy脚本(如果Groovy在类路径中)。当然,第三方框架可以选择支持其他类型的基于路径的资源。
posted @ 2020-08-07 15:43  evilposeidon  阅读(177)  评论(0)    收藏  举报