@SpringBootApplication
@SpringBootApplication
在一个springboot应用程序的入口,用到的@SpringbootApplication注解的源码如下:
package org.springframework.boot.autoconfigure;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.core.annotation.AliasFor;@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 {@AliasFor(annotation = EnableAutoConfiguration.class,attribute = "exclude")Class<?>[] exclude() default {};@AliasFor(annotation = EnableAutoConfiguration.class,attribute = "excludeName")String[] excludeName() default {};@AliasFor(annotation = ComponentScan.class,attribute = "basePackages")String[] scanBasePackages() default {};@AliasFor(annotation = ComponentScan.class,attribute = "basePackageClasses")Class<?>[] scanBasePackageClasses() default {};
}
@SpringBootConfiguration的源码
package org.springframework.boot;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Configuration;@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
从上面两段源码可知,@SpringBootApplication
是@Configuration
,EnableAutoConfiguration
,@ComponentScan
的组合。
换言之 SpringBoot 提供了统一的注解来替代以上三个注解,简化程序的配置。
@Configuration
Srping官方文档:
@Configuration is a class-level annotation indicating that an object is a source of bean definitions.
@Configuration classes declare beans via public @Bean annotated methods. Calls to @Bean methods on @Configuration classes can also be used to define inter-bean dependencies.
@Configuration 是一个类级注释,指示对象是一个bean定义的源。@Configuration 类通过 @bean 注解的公共方法声明bean。
@Bean 注释是用来表示一个方法实例化,配置和初始化是由 Spring IoC 容器管理的一个新的对象。
通俗的讲 @Configuration 一般与 @Bean 注解配合使用,用 @Configuration 注解类等价与 XML 中配置 beans,用 @Bean 注解方法等价于 XML 中配置 bean。
举个栗子:
xml配置
<beans><bean id = "UserService" class="com.user.Userservice"><property name="userDAO" ref = "userDAO"></property></bean><bean id = "userDAO" class="com.user.UserDAO"></bean>
</beans>
java代码:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class Config {@Beanpublic UserService getUserService(){UserService userService = new UserService();userService.setUserDAO(null);return userService;}@Beanpublic UserDAO getUserDAO(){return new UserDAO();}
}
package org.spring.com.user;public class UserService {private UserDAO userDAO;public UserDAO getUserDAO() {return userDAO;}public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}
}
package org.spring.com.user;public class UserDAO {
}
小结:
使用 public 修饰 @Bean 注解的方法;UserService、UserDAO 类无需声明为 @Component、@Service、@Repository、@Controller;
@EnableAutoConfiguration
spring官方文档:
@SpringBootApplication相关推荐
- 在SpringBoot启动类上添加ComponentScan出现springbootapplication already applies given @ComponentScan
查看@SpringBootApplication注解源码,可以看到 @SpringBootApplication=@Configuration+@EnableAutoConfiguration+@Co ...
- 扒一扒 @SpringBootApplication 注解背后的奥秘!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 概 述 Spring Boot的约定大于配置的功力让我们如 ...
- spring boot入门:@SpringBootApplication
这个 @SpringBootApplication 很重要.他在哪里就是哪里的引导类! 下图就可以成功,因为,在swq999类里面加了spring boot application 但是,一般还是会写 ...
- 神秘又强大的@SpringBootApplication注解
作者:vivo 互联网服务器团队-Peng peng 一.前言 大部分的配置都可以用Java类+注解来代替,而在SpringBoot项目中见的最多的莫过于@SpringBootApplication注 ...
- springboot扫描组件_SpringBoot入口类和@SpringBootApplication详解
SpringBoot项目创建完成之后默认会生成一个*Application的入口类,通过该类的main方法即可启动SpringBoot项目. @SpringBootApplication(exclud ...
- springboot 启动类注解 @SpringBootApplication 和 @ComponentScan 的问题
问题: 在启动类Application上使用@ComponentScan 这个注解来扫描第三方的包,然后就会出现报错,异常就是无法加载本地的某些类,例如某些Dao无法注入. 分析: 启动类注解 @Sp ...
- springboot 启动分析【难点】——如何自动扫描 @SpringBootApplication||如何加载自动配置类 @EnableAutoConfiguration||如何加载前端控制器
springboot 启动分析[难点] 自动扫描的特点 默认扫描与 启动类 同级的所有包及其子包都可以自动扫描 如果不可要使用@ComponentScan(basePackage={"&qu ...
- @springbootapplication 注解_Spring Boot最核心的27个干货注解,你了解多少?
Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架,它不仅可以方便地创建生产级的Spring应用程序,还能轻松地通过一些注解配置与目前比较火热的微服务框架SpringClo ...
- 004-Spring boot 快速入门-项目搭建与启动、SpringBootApplication、启动图标
一.官方地址 Spring:http://spring.io/ Spring Project:http://spring.io/projects Spring boot:https://project ...
- SpringBootApplication注解
@Target(ElementType.TYPE) // 注解的适用范围,其中TYPE用于描述类.接口(包括包注解类型)或enum声明 @Retention(RetentionPolicy.RUNTI ...
最新文章
- BiB: 电子科大邹权组构建基于肠道菌群平衡的疾病预测模型及微生物生物标志物发掘平台...
- 开发日记-20190915 关键词 汇编语言王爽版 第十三章
- php的数据校验,php 数据类型校验函数的简单示例
- ML之RS:基于用户的CF+LFM实现的推荐系统(基于相关度较高的用户实现电影推荐)
- vlan、三层交换机、网关、DNS、子网掩码、MAC地址
- 一朵云、一张网、一体化 ——GRTN 打造最佳流媒体场景实践
- nginx.conf删除与否网页都能访问(nginx没有生效)的问题
- linux nfs共享目录集群,CentOS7通过NFS共享文件夹,主要用于集群部署时候,文件的共享...
- javaScript第二天(1)
- mysql数据库加权随机_SQL:随机选择一行,但考虑到权重
- 元旦表白神器!C语言实现浪漫烟花表白(有背景音乐+示例源码)
- 微信小程序 flex:1表示什么
- Blueprint Framemaker介绍
- 75道程序员面试逻辑思维题及答案解析
- Lineage Logistics完成对 UTI Forwarding的收购
- 计算机网络-DHCP的工作原理,IP地址如何获取
- 计算机应用基础名词解释动画,《计算机应用基础》期末考试复习题库-名词解释题题库...
- word2016(office 365)中安装mathtype相关问题及解决办法
- Elasticsearch高级(Shards、高可用集群搭建)
- C#笔试题面试题锦集