首页 > 应用开发 > Java > 好程序员分享SpringBoot须掌握的注解
Spring 经历了如下几个阶段 :
第一阶段: xml 配置
在 Spring 1.x 时代,使用 Spring 开发满眼都是 xml 配置的 Bean ,随着项目的扩大,我们需要把 xml 配置文件放到不同的配置文件里,那时需要频繁的在开发的类和配置文件之间进行切换
第二阶段:注解配置
在 Spring 2.x 时代,随着 JDK1.5 带来的注解支持, Spring 提供了声明 Bean 的注解(例如 @Component 、 @Service ),大大减少了配置量。主要使用的方式是应用的基本配置(如数据库配置)用 xml ,业务配置用注解
第三阶段: java 配置
Spring 3.0 引入了基于 Java 的配置能力,这是一种类型安全的可重构配置方式,可以代替 XML 。我们目前刚好处于这个时代, Spring4.x 和 Spring Boot 都推荐使用 Java 配置。
所有这些 xml 配置都代表了开发时的损耗。 因为在思考 Spring 特性配置和解决业务问题之间需要进行思维切换,所以写配置挤占了写应用程序逻辑的时间 。 Spring Boot 让这一切成为了过去。 Spring Boot 简化了基于 Spring 的应用开发,只需要 “run” 就能创建一个独立的、生产级别的 Spring 应用。 Spring Boot 为 Spring 平台及第三方库提供开箱即用的设置(提供默认设置),这样我们就可以简单的开始。多数 Spring Boot 应用只需要很少的 Spring 配置。我们可以使用 SpringBoot 创建 java 应用,并使用 java –jar 启动它,或者采用传统的 war 部署方式。这也是 SpringBoot 让 越来越多的开发人员使用的主要原因之一。下面我们就来详细讲解 Spring Boot 几个很重要的注解: @Configuration , @Bean , @SpringBootApplication , @ComponentScan
Spring 的 Java 配置方式是通过 @Configuration 和 @Bean 这两个注解实现的,这两个注解是从 Spring3.0 之后就开始有了:
1 、 @Configuration 作用于类上,相当于一个 xml 配置文件;
2 、 @Bean 作用于方法上,相当于 xml 配置中的 <bean> ;
案例
|
@Configuration public class DemoConfigure { @Bean public User userBean(){ User user=new User(); user.setAge(100); user.setName("jack"); user.setPwd("123"); return user; } }
|
测试如下:
|
package com.example.springboot01;
|
打印:
User{name='jack', pwd='123', age=100}
@SpringBootApplication 注解源码如下:
|
package org.springframework.boot.autoconfigure; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication {
}
|
@SpringBootApplication 是一个复合注解,包括 @ComponentScan ,和 @SpringBootConfiguration , @EnableAutoConfiguration 。
- @SpringBootConfiguration 继承自 @Configuration ,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以 @Bean 注解标记的方法的实例纳入到 srping 容器中,并且实例名就是方法名。
- @EnableAutoConfiguration 的作用启动自动的配置, @EnableAutoConfiguration 注解的意思就是 Springboot 根据你添加的 jar 包来配置你项目的默认配置,比如根据 spring-boot-starter-web ,来判断你的项目是否需要添加了 webmvc 和 tomcat ,就会自动的帮你配置 web 项目中所需要的默认配置。
- @ComponentScan ,扫描当前包及其子包下被 @Component , @Controller , @Service , @Repository 注解标记的类并纳入到 spring 容器中进行管理。是以前的 <context:component-scan> (以前使用在 xml 中使用的标签,用来扫描包)。
@SpringBootApplication 注解默认扫描的是当前类所在的包和子包。自己可以通过属性来设置扫描其他的包,设置了之后默认值就不在有用。
@SpringBootApplication(scanBasePackageClasses = {TestConfig.class,TestController.class})
通过设置
scanBasePackageClasses
属性来制定,只扫描哪些配置类(
@Configuration
注解的类)。
或者如下设置:
@SpringBootApplication(scanBasePackageClasses = {Springboot01Application.class,TestConfig.class})
指定扫描这些类所在的包和子包。
springboot 的自动配置可以帮我们节省很多时间 , 但是有时候如果我们不想在引入依赖包的情况自动配置 , 则可以通过相关设置取消
在 @SpringBootApplication ( exclude = { JpaRepositoriesAutoConfiguration . class , RedisAutoConfiguration . class }) 注解内部将不需要自动配置的依赖通过 exclude 参数指定即可 , 可以指定多个类
所有自动配置的类全都在: org.springframework.boot.autoconfigure 包下。只能排出自动配置的类。
@ComponentScan 注解在 Spring 的注解中也起到到相当重要的作用,它可以自定义 Spring 扫描的包,也就是它默认会扫描标注了 @Controller 、 @Service 、 @Component 以及 @Repository 注解的类,并实例化这些组件到 SpringIOC 容器中,它有个配置属性: basePackages ,也就是指定扫描的包,如果不知道,它会默认扫描配置了该注解的类的包所在的路径(包括子包)。我们看 @SpringBootConfiguration 注解的源码中有段代码:
@AliasFor
(
annotation
=
ComponentScan
.
class
,
attribute
=
"basePackages"
)
String
[]
scanBasePackages
()
default
{};
scanBasePackages 属性,指定到了 @ComponentScan 注解的 basePackages 属性,所有在 SpringBoot 中,我们同样可以通过 scanBasePackages 属性指定包扫描的路径(如不指定,会默认扫描主程序类所在的包路径以及子包下的类):
@SpringBootApplication(scanBasePackages = "com.seagetech.springbootdemo")
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913892/viewspace-2646751/ ,如需转载,请注明出处,否则将追究法律责任。