springboot的常用注解

点击返回目录

@Configuration:

允许在上下文中注册额外的bean或导入其他配置类

这个注解相当于一个xml文件.

举例1:如下的xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

	<bean class="com.User"></bean>
	
</beans>

 在java配置里大概就是这样。

@Configuration
public class JavaConfig{
	
	@Bean
	public User user(){
		return new User();
	}
}

 

@Bean:

作用在方法上面,通常可以将该方法的返回值作为Bean注入到spring的容器中.

每个bean都有一个name值,在Configuration里面,@Bean的name就是方法名.当然你可以显式地指出bean的name,并且可以拥有多个name,如下:

@Configuration
public class JavaConfig{
	
	@Bean({"myUser","user"})
	public User user(){
		return new User();
	}
}

你也可以为bean设置scope等,这些属性都需要一些特定的注解,如下设置scope:这将不再是个单例

        @Bean
	@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
	public User user(){
		return new User();
	}

@Component

spring启动的时候加载的bean.

Component和Controller以及Service等这些注解没有什么区别,只是Controller/Service是一种约定,约定分别加到哪一层。

那么Component和Bean又有什么区别呢?

Component是类注解,Bean是方法注解。

Bean注解还可以让第三方包作为Bean,但是Component则不行啦。

@ComponentScan

扫描包来导入Bean。一般配合@Configuration来使用,和XML的<context:component-scan>极为相似,例子如下:

@Configuration
@ComponentScan("com.service")
public class JavaConfig{
	
}

如果没有指定包,则从当前类的包中进行扫描。 

@Import

导入Configuration ,使用如下:

@Configuration
@Import({UserConfig.class,ManagerConfig.class})
public class JavaConfig{
	
}

它和 @ComponentScan的最终结果是一样的,只是过程和表现形式是不同的。

@EnableAutoConfiguration

启用Spring Boot的自动配置机制。

Spring Boot自动配置:尝试根据您添加的jar依赖项自动配置Spring应用程序。例如,如果HSQLDB 在您的类路径上,并且您尚未手动配置任何数据库连接bean,则Spring Boot会自动配置内存数据库。

该注解应该只配置一个。

能够自动配置的清单在这里:https://docs.spring.io/spring-boot/docs/2.1.4.RELEASE/reference/htmlsingle/#auto-configuration-classes-from-autoconfigure-module

@SpringBootApplication

SpringBootApplication = EnableAutoConfiguration + Configuration + ComponentScan

springboot的启动注解

如下:

@SpringBootApplication
public class Application {
	public static void main(String[] args) {
		new SpringApplication(Application.class).run(args);
	}

}

等于

@EnableAutoConfiguration
@Configuration
@ComponentScan
public class Application {
	public static void main(String[] args) {
		new SpringApplication(Application.class).run(args);
	}

}

由此亦可以推导出,为什么SpringApplication的启动类要放在其他类之上的根包中,因为ComponentScan会只扫描当前包

 

@RunWith(SpringJUnit4ClassRunner.class)

这个注解实际上是Junit的,但是在spring的test里必不可少。

@ContextConfiguration

这个是spring测试,用来加载spring上下文。它有locations和classes两个属性,一个是用来加载Configuration类的,一个是用来加载xml文件的。

@SpringBootTest

这个是SpringBoot的测试,它不仅加载上下文,同时还会启动SpringBoot,它有个class属性,填入springboot的启动类。

如果不填启动类,那么它会寻找@SpringBootConfiguration的配置来启动springboot

@SpringBootConfiguration

Spring准备用它来代替@Configuration,但是在注释里说最好一个应用只配置一个,有点不太理解为什么不能配置多个呢?

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值