作者 | 小明菜市场

来源 | 小明菜市场(ID:fileGeek)

头图 |  CSDN 下载自东方IC

前言

Spring Boot 最大的特点是无需 XML 配置文件,能够实现自动装配,并进行全自动化的jar包配置。Spring Boot 是微服务的核心,其Spring Cloud 是基于Spring Boot 为基础的。其框架是用来简化Spring应用的初始搭建和开发过程,即,简化了框架,便捷了开发。下面开始介绍Spring Boot 最核心的三个注解。

Configuration

在Spring4以后,官方推荐使用 Java Config 来代替 Application.xml 声明将Bean交给容器管理。在Spring Boot 中,Java Config 使用完全代替了application.xml 实现了xml的零配置, 看下面这个例子。

创建一个bean类

public class SomeBean {public void doWork() {System.out.println("do work...");}
}

其中,dowork是逻辑方法 再创建一个Config类

@Configuration
public class Config {@Beanpublic SomeBean someBean() {return new SomeBean();}
}

在这里,在Config类上添加了一个@configuration注解,可以理解为Spring中的配置类,其返回值为someBean,someBean方法上也添加了一个@bean注解,其返回对象也将会交由Spring容器进行管理。

简单测试

public class Test {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);SomeBean sb = context.getBean(SomeBean.class);sb.doWork();}
}

这里,创建了一个AnnotationConfigApplicationContext对象,传入了Config.class 后,得到了someBean对象。

do work...

扩展

一般的,一个完整的bean需要包括,id,class,initMethod,destroyMethod,·ref,scope。所以这里使用 Java Config 进行相关的配置这些属性。修改第一个例子代码

public class SomeBean {private void init() {System.out.println("init...");}public void doWork() {System.out.println("do work...");}private void destroy() {System.out.println("destroy...");}}

增加,init,destroy方法

@Configuration
public class Config {@Bean(initMethod = "init",destroyMethod = "destroy")public SomeBean someBean() {return new SomeBean();}
}

在bean注解上,属性指向对应的方法。

public class Test {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);SomeBean sb1 = context.getBean(SomeBean.class);System.out.println(sb1);SomeBean sb2 = context.getBean(SomeBean.class);System.out.println(sb2);context.close();}
}

输出结果为

init...
com.spring.SomeBean@16022d9d
com.spring.SomeBean@16022d9d
destroy...

这样就完成了一个配置的生命周期。

@ComponentScan

@ComponentScan注解,用于类或接口上主要指定的扫描路径,Spring会把指定路径下带有指定注解的类自动装配到bean容器里,会被自动装配的注解包括@Controller,@Service,@Component,@Repository等。其作用相当于,<context:component-scan base-package=”com.maple.learn” />配置。

基本使用

常用的属性如下 basePackages,value,指定扫描路径,如果为空,则以@ComponentScan注解的类所在的包扫描路径。basePackageClasses:指定具体扫描的类 includeFilters:指定满足Filter条件的类 excludeFilters:指定排除Filter条件的类 includeFilters和excludeFilters 的FilterType可选:ANNOTATION=注解类型 默认、ASSIGNABLE_TYPE(指定固定类)、ASPECTJ(ASPECTJ类型)、REGEX(正则表达式)、CUSTOM(自定义类型),自定义的Filter需要实现TypeFilter接口 @ComponentScan的常见的配置如下:

  @ComponentScan(value="com.maple.learn",excludeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class)},includeFilters = {@ComponentScan.Filter(type=FilterType.ANNOTATION,classes={Controller.class})})
public class SampleClass{……
}

@EnableAutoConfiguration

其注解是一个组合注解, 其源码如下

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";Class<?>[] exclude() default {};String[] excludeName() default {};}

其中最重要的是@Import(AutoConfigurationImportSelector.class)注解,借助AutoConfigurationImportSelector,@EnableAutoConfiguration 帮助Spring Boot 应用将所有符合条件的@Configuration 配置加载到IOC容器中,而最主要的还需要借助于 Spring 框架的一个工具类,SpringFactoriestLoader 将META-INF/spring.factories加载配置,spring.factories文件是一个典型的properties配置文件,配置格式为key=value形式,不过key和value都是完整的类名,例如

org.springframework.data.repository.core.support.RepositoryFactorySupport=org.springframework.data.jpa.repository.support.JpaRepositoryFactory

更多精彩推荐
☞开源商业化未来究竟如何?国际开源圈网红这样说☞2020 最烂密码 TOP 200 大曝光,霸榜的竟然是它?☞腾讯 AI 医学进展破解“秃头”难题,登 Nature 子刊!☞用Python分析5000+抖音大V,粉丝最喜欢的视频类型是它
☞亿级大表分库分表实战总结(万字干货,实战复盘)
☞优秀!一鼓作气学会“一致性哈希”,就靠这 18 张图了
点分享点点赞点在看

详解 :Spring Boot 最核心的 3 个注解相关推荐

  1. 详解 | Spring Boot 最核心的 3 个注解详解

    Hi !我是小小,开始本周的第一篇,本周第一篇内容是关于Spring Boot 最核心的三个注解,将会对这三个注解进行详细解释. 前言 Spring Boot 最大的特点是无需 XML 配置文件,能够 ...

  2. 详解Spring Boot框架中的@Conditional系列注解

    目录 1. @Conditional 注解 2. Spring boot 扩展 1) @ConditionalOnClass和@ConditionalOnMissingClass注解 2) @Cond ...

  3. Spring Boot 最核心的 3 个注解详解

    最近面试一些 Java 开发者,他们其中有些在公司实际用过 Spring Boot, 有些是自己兴趣爱好在业余自己学习过. 然而,当我问他们 Spring Boot 最核心的 3 个注解是什么,令我失 ...

  4. 盘点Spring Boot最核心的27个注解

    Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架,它不仅可以方便地创建生产级的Spring应用程序,还能轻松地通过一些注解配置与目前比较火热的微服务框架SpringClo ...

  5. 万字长文:详解 Spring Boot 中操作 ElasticSearch

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 超级小豆丁 来源 | http://www.m ...

  6. elasticsearch 客户端工具_万字长文:详解 Spring Boot 中操作 ElasticSearch

    点击上方"小强的进阶之路",选择"星标"公众号 优质文章,及时送达 预计阅读时间: 15分钟 一.ElasticSearch 简介 1.简介 ElasticSe ...

  7. java中的controller_详解Spring Boot中Controller用法

    Controller Controller是SpringBoot里最基本的组件,他的作用是把用户提交来的请求通过对URL的匹配,分配个不同的接收器,再进行处理,然后向用户返回结果.他的重点就在于如何从 ...

  8. 详解Spring Boot 2.X使用缓存@Cacheable代码示例

    从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事务管理的支持.Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该 ...

  9. java部署jar还是war优劣_详解Spring Boot 部署jar和war的区别

    本文介绍了Spring Boot 部署jar和war两种方式的区别,分享给大家,具体如下: 1. packaging的方式不同,一种设置成jar一种是war xsi:schemaLocation=&q ...

最新文章

  1. Linux下LAMP环境的安装之编译安装过程(五)
  2. 京东方网络推广外包将为三星提供OLED 屏幕可造成韩国显示产业动荡
  3. 92. Leetcode 63. 不同路径 II (动态规划-路径规划)
  4. Matlab实用程序--图形应用-区域图形
  5. HTML5新特性之WebRTC
  6. : Content type 'text/plain;charset=UTF-8' not supported
  7. JSON-lib 使用
  8. C++原子操作 atomic的使用及效率
  9. 【转】WPF中关于样式和模板的区别
  10. 阅读下面程序,请回答如下问题:
  11. php SNMP函数时出错
  12. python的pygame模拟太阳-地球-月亮-金星等动态示意图代码分析
  13. 立体视觉:合成数据集的解析与工具
  14. 初识Kinect之一
  15. mysql添加表或字段注释
  16. 地理坐标的六边形编码(PHXIS)
  17. 如何设置电脑可以qq远程桌面连接到服务器,qq如何实现远程访问家里的电脑?
  18. 在前端开发中,页面渲染指什么
  19. 设置按峰值带宽计费_计费系统—音视频云服务
  20. LED驱动电源有哪些特点

热门文章

  1. Numpy:ndim、shape、dtype、astype用法介绍
  2. Python:一文让你彻底理解numpy中axis=-1/0/1/2... [实例讲解:np.argmax(axis= -1 0 1 2) np.sum(aixs= -1 0 1 2)]
  3. 长春理工大学第十四届程序设计竞赛(重现赛)B
  4. LeetCode 中级 - 第k个排列(60)
  5. JS 获取随机颜色值
  6. JAVA隐藏鼠标的方法
  7. Visual.Basic.2008编程参考手册
  8. python open打开文件的方式
  9. Java SSH远程执行Shell脚本实现
  10. tmux + zsh