springboot学习时会用到各种各样的注解,这些注解方便我们开发项目,但注解实在是太多了(捂脸),因此写这篇博客来总结一下~
lombok相关
@Data
用在bean类中,lombok用于生成get,set方法的注解
@ToString
用在bean类中,lombok用于生成get,set方法的注解,lombok编译阶段生成ToString方法的注解
@AllArgsConstructor
用在bean类中,lombok用于生成全参构造器
@NoArgsConstructor
用在bean类中,lombok用于生成无参构造器
注:若需要使用定制构造函数,需要自己写在bean类中
其他常用注解
@Component
把普通bean实例化到spring容器中
@Autowired
例如
@Autowired
Car car;
被注解的这个类是从Spring容器中取出来的
@ConfigurationProperties
在 Spring Boot 项目中,我们将大量的参数配置在 application.properties 或 application.yml 文件中,此注解负责将配置文件中的参数注解到普通类上
三种常见使用方式
-
@Component // 表示使用配置文件中前缀为user1的属性的值初始化该bean定义产生的的bean实例的同名属性 @ConfigurationProperties(prefix = "user1") public class User { private String name; // 省略getter/setter方法 }
-
@Configuration public class DataSourceConfig { @Primary @Bean(name = "primaryDataSource") @ConfigurationProperties(prefix="spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } } 这里便是将前缀为“spring.datasource.primary”的属性,赋值给DataSource对应的属性值。 @Configuration注解的配置类中通过@Bean注解在某个方法上将方法返回的对象定义为一个Bean,并使用配置文件中相应的属性初始化该Bean的属性。
-
使用@ConfigurationProperties注解到普通类,然后再通过@EnableConfigurationProperties定义为Bean
@ConfigurationProperties(prefix = "user1") public class User { private String name; // 省略getter/setter方法 }
这里User对象并没有使用@Component相关注解,而该User类对应的使用形式如下:
@SpringBootApplication @EnableConfigurationProperties({User.class}) public class Application { public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } }
@RestController
在Spring中@RestController的作用等同于@Controller + @ResponseBody,要先了解@Controller和@ResponseBody注解。
@Controller
在一个类上添加@Controller注解,表明了这个类是一个控制器类,但光有@Controller注解是不够的,需要进一步处理才能成为一个处理器
- 将@Controller注解的类注入spring容器中,这一步springboot的包扫描给我们做了
- 在该类中添加注解@RequestMapping
@RequestMapping
该注解是用来映射请求的,即指明处理器可以处理哪些URL请求,该注解既可以用在类上,也可以用在方法上。
@ResponseBody
@ResponseBody表示方法的返回值直接以指定的格式写入Http response body中,而不是解析为跳转路径。
如果要求方法返回的是json格式数据,而不是跳转页面,可以直接在类上标注@RestController,而不用在每个方法中标注@ResponseBody,简化了开发过程。
@Bean
用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中,默认作用域为单例singleton作用域,
//产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中,是一个单例
//Myconfig.java
@Bean("Tom")
public Pet tomcatPet(){
return new Pet("tom");
}
@SpringBootApplication()
public class SecondApplication {
public static void main(String[] args) {
Pet tom1 = run.getBean("Tom", Pet.class);
Pet tom2 = run.getBean("Tom", Pet.class);
System.out.println("两个tom是否一样"+(tom1 == tom2));
}
}
//打印结果是true,注册的组件默认是单实例
@Configuration(proxyBeanMethods = true)
用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,
proxyBeanMethods 默认为true
/*
Full:(proxyBeanMethods = true)
打印配置类,打印结果为com.hammer.config.Myconfig$$EnhancerBySpringCGLIB$$ba5f8b0d@6edc4161
是一个被cglib增强了的代理对象
当组件注册的方法被调用时,程序会去容器中找这个单例对象组件
该模式下,配置类内部可以通过方法调用来处理依赖,并且能够保证是同一个实例,都指向IoC内的那个单例
**/
/*
Lite:(proxyBeanMethods = false)
打印配置类,打印结果为
com.hammer.config.Myconfig@997d532
不是代理对象
每当组件注册的方法被调用时,都会产生一个新的对象
该模式下,配置类内部不能通过方法调用来处理依赖,否则每次生成的都是一个新实例而并非IoC容器内的单例
**/
@ConditionalOnBean
应用包含某个类时,配置才生效
@Bean("Tom")
public Pet tomcatPet(){
return new Pet("tom");
}
/*
* @ConditionalOnBean(name = "Tom")如果加在方法上,当容器中存在Tom组件时,该方法返回的组件才会注册在容器里
* 如果加在类上,当条件成立时,类中所有的配置才会生效
*
* */
@Bean
@ConditionalOnBean(name = "Tom")
public User user01(){
User hammer = new User("hammer",23);
hammer.setPet(tomcatPet());
return hammer;
}
@ImportResource
导入Spring的配置文件让其生效
//导入Spring的配置文件让其生效
@ImportResource("classpath:bean.xml")
@EnableConfigurationProperties
//开启属性配置功能,把组件自动注册到容器中
@EnableConfigurationProperties(Car.class)