Spring Framework 组件注册 之 @Component
Spring Framework 组件注册 之 @Component
写在前面
在spring大行其道的今天,对于spring的使用和掌握乃是不可缺少的必备技能。但是spring的整个体系尤为庞大,对它的学习,还得从基础一点一滴的慢慢积累。本文主要介绍
@Component注解在spring中的简单使用,以及注解的派生性和层次性
@Component 简单使用
@Component注解是一个元注解,即可以标注在其它的注解上。在spring中,任何被@Component注解标识的组件均为组件扫描的候选对象,并且被@Component元注解标注的注解,在任何组件标注它时,也被视作组件扫描的候选对象。简单来说,就是在spring中,一个普通的javaBean被@Component注解标记后,在使用基于注解配置和类路径扫描时,会被作为候选组件,添加到spring容器中
package com.spring.study.ioc.register;
/**
* spring扫描的候选组件
*
* @author TangFD
* @since 2019/6/25.
*/
@Data
@Component
public class TestComponent {
private String id = "@Component";
}
添加spring启动引导类,以及spring启动时需要扫描的类路径
/**
* spring 容器启动引导类
*
* @author TangFD
* @since 2019/6/25.
*/
@ComponentScan("com.spring.study.ioc.register")
public class TestComponentBootstrap {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext =
new AnnotationConfigApplicationContext(TestComponentBootstrap.class);
System.out.println("context id : " + applicationContext.getId());
TestComponent bean = applicationContext.getBean(TestComponent.class);
System.out.println("TestComponent bean : " + bean);
applicationContext.close();
}
}
spring容器启动后,控制台打印的结果:
context id : org.springframework.context.annotation.AnnotationConfigApplicationContext@21b8d17c
TestComponent bean : TestComponent(id=@Component)
如此,在spring中通过简单在一个普通的javaBean上添加@Component注解,再加上扫描类路径,就可以将该javaBean添加到spring容器中。spring就可以对这个Bean的生命周期进行管理。
前面提到
@Component是一个元注解,当它标记在另一个注解上时,该组件同样会具有被spring扫描,并识别组件的能力。在spring中,被@Component标记的注解有很多,例如:@Controller,@Service,@Repository,当一个普通的javaBean被这些注解标注时,spring容器启动时同样会把该Bean视为候选组件,添加到容器中。
将上面TestComponent类的注解换成@Service,结果也是相同的
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
@AliasFor(annotation = Component.class)
String value() default "";
}
/**
* spring扫描的候选组件
*
* @author TangFD
* @since 2019/6/25.
*/
@Data
@Service
public class TestComponent {
private String id = "@Service";
}
spring容器启动后,控制台打印的结果:
context id : org.springframework.context.annotation.AnnotationConfigApplicationContext@21b8d17c
TestComponent bean : TestComponent(id=@Service)
派生性和层次性
这两个概念源自慕课网中小马哥的课程介绍,严格上讲,注解是没有派生性和层次性的,之所以这样讲,是因为在spring中的很多注解都是有着派生性和层次性的结构。通过这两种特性,我们也可以自定义自己的注解,利用@Component元注解,来将普通的javaBean扫描添加到spring容器中
派生性
自定义一个注解@FirstAnnotation,被@Component元注解标识,并保持相同的签名,当有组件使用@FirstAnnotation 注解标注时,就会被spring容器扫描并加载
/**
* 自定义注解@FirstAnnotation,被@Component标注
* @author TangFD
* @since 2019/6/10.
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface FirstAnnotation {
String value() default "";
}
将上面TestComponent类的注解换成@FirstAnnotation ,结果也是相同的
/**
* spring扫描的候选组件
*
* @author TangFD
* @since 2019/6/25.
*/
@Data
@FirstAnnotation
public class TestComponent {
private String id = "@FirstAnnotation";
}
spring容器启动后,控制台打印的结果:
context id : org.springframework.context.annotation.AnnotationConfigApplicationContext@21b8d17c
TestComponent bean : TestComponent(id=@FirstAnnotation)
层次性
Spring模式注解并不具有真正的派生性和层次性,只是像java类一样,具有类似继承和层次结构的功能
自定义一个注解@SecondAnnotation,被@FirstAnnotation注解标识,当有组件使用@SecondAnnotation 注解标注时,同样会被spring容器扫描并加载
/**
* 自定义注解@SecondAnnotation ,被@FirstAnnotation标注
*
* @author TangFD
* @since 2019/6/11.
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@FirstAnnotation
public @interface SecondAnnotation {
String value() default "";
}
将上面TestComponent类的注解换成@SecondAnnotation,结果也是相同的
/**
* spring扫描的候选组件
*
* @author TangFD
* @since 2019/6/25.
*/
@Data
@SecondAnnotation
public class TestComponent {
private String id = "@SecondAnnotation";
}
spring容器启动后,控制台打印的结果:
context id : org.springframework.context.annotation.AnnotationConfigApplicationContext@21b8d17c
TestComponent bean : TestComponent(id=@SecondAnnotation)
小结
本文介绍了spring中
@Component元注解的简单使用,并通过示例说明了注解的继承和层次性功能。文章内容非常简单,只要对spring有所了解和入门,都不会有什么问题。
之所以把这些简单的内容拿出来写,一是给自己在写博客,或者说是记录学习笔记的路上开一个简单的头,二是将自己认为会的东西进行梳理,进一步理解,巩固自己的知识。
学习永远都不是一件简单的事情,可以有迷茫,可以懒惰,但是前进的脚步永远都不能停止。
不积跬步,无以至千里;不积小流,无以成江海;
Spring Framework 组件注册 之 @Component的更多相关文章
- Spring Framework 组件注册 之 @Import
Spring Framework 组件注册 之 @Import 写在前面 向spring中注册组件或者叫javaBean是使用spring的功能的前提条件.而且spring也提供了很多种方式,让我们可 ...
- Spring Framework 组件注册 之 FactoryBean
Spring Framework 组件注册 之 FactoryBean 前言 前两篇文章介绍了如何使用@Component,@Import注解来向spring容器中注册组件(javaBean),本文将 ...
- spring注解-组件注册
一.@Configuration+@Bean @Configuration:配置类==配置文件 @Bean:给容器中注册一个Bean:类型为返回值的类型,默认是用方法名作为id @Bean(" ...
- Spring笔记 - 组件注册
@Bean:类注入容器 xml方式: <bean id="person" class="com.hrh.bean.Person"> <prop ...
- 一、Spring之组件注册-@Configuration&@Bean给容器中注册组件
xml配置方式 首先我们创建一个实体类Person public class Person { private String name; private Integer age; private St ...
- Spring Framework 条件装配 之 @Conditional
Spring Framework 条件装配 之 @Conditional 前言 了解SpringBoot的小伙伴对Conditional注解一定不会陌生,在SpringBoot项目中,Conditio ...
- 一步步从Spring Framework装配掌握SpringBoot自动装配
目录 Spring Framework模式注解 Spring Framework@Enable模块装配 Spring Framework条件装配 SpringBoot 自动装配 本章总结 Spring ...
- Spring Boot之从Spring Framework装配掌握SpringBoot自动装配
Spring Framework模式注解 模式注解是一种用于声明在应用中扮演“组件”角色的注解.如 Spring Framework 中的 @Repository 标注在任何类上 ,用于扮演仓储角色的 ...
- 04 . Vue组件注册,数据交互,调试工具及组件插槽介绍及使用
vue组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的 ...
随机推荐
- jxl导出Excel
首先先在自己工程中导入jxl的jar包: 疯狂google后找到一段别人的导出excel方法,先备份于下面: import java.io.File; import java.io.FileOutpu ...
- Fidder模拟发送请求
在Fiddler的Composer一栏,可以模拟请求 举例 首先通过浏览器访问页面http://baidu.com/ ,在右侧可以拿到请求情况 在Inspectors一栏可以看到请求和响应结果,复制请 ...
- 通通WPF随笔(3)——艺术二维码素材生成器
原文:通通WPF随笔(3)--艺术二维码素材生成器 最近公司让我开发一个条形码的生成控件,花了半天时间搞定觉得不过瘾,什么年代了该用二维码了吧.于是wiki了一下二维码的资料. 比较常见的就是QR码( ...
- Win10 如何以管理员身份设置开机自启程序(1)
原文:Win10 如何以管理员身份设置开机自启程序(1) 最近一个项目在win10上部署时遇到问题,即如何设置以管理员身份开机自启.现把解决方法整理如下: 首先,为了进行验证,我编了一个简单的程序te ...
- centos搭建免费的ssl证书,大部分浏览器均支持!(let’s encrypt 的使用记录)
安装certbot wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto 然后就是通过这个脚本获取证书,安装前先将NGINX 停一下. ...
- 深度分析WM_PAINT和WM_ERASEBKGND消息
做windows开发这么久了,一直以来对WM_PAINT和WM_ERASEBKGND消息总是感觉理解的不准确,每次要自绘一个窗口都因为知其然不知其所以然,偶然发现一篇文章,详细透彻地分了这个两个消息的 ...
- 用友u8各版本在输出的时候报错提示:外部数据库驱动程序(1)中的意外错误
从10月12日起很多U8用户反馈,在各版本U8中输出报表时软件报错,报错内容“外部数据库驱动程序(1)中的意外错误”,经初步分析有以下解决方案:1.卸载微软的补丁:(1)如果是PC操作系统(一般是客户 ...
- adb help
Android Debug Bridge version 1.0.32Revision cc6ae925e394-android -a - directs adb to listen on all i ...
- win10 uwp 异步转同步
原文:win10 uwp 异步转同步 有很多方法都是异步,那么如何从异步转到同步? 可以使用的方法需要获得是否有返回值,返回值是否需要. 如果需要返回值,使用GetResults 如从文件夹获取文件: ...
- 把BitmapSource图片数据保存到文件
实现函数: /// <summary> /// 保存图片到文件 /// </summary> /// <param name="image">图 ...