SpringBoot2入门必读(1):Spring boot的常用注解
@SpringBootApplication
@SpringBootApplication出现在程序入口类中,这个注解主要包含三个主要注解
- @ComponentScan 用来自动扫描被这些注解标识的类,最终生成ioc容器里的bean,默认扫描范围是@ComponentScan注解所在配置类包及子包的类
- @SpringBootConfiguration 与@Configuration作用相同,都是用来声明当前类是一个配置类,这里表明是springboot主类使用的配置类
- @EnableAutoConfiguration 是springboot实现自动化配置的核心注解,通过这个注解把spring应用所需的bean注入容器中
@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 {
@Controller、@Service、@Repository、@Component
这些注解的功能基本一致,被这些注解的类会被注册到IOC容器中,只是根据使用场景不同使用不同的名字进行标识
- @Controller在控制层使用
- @Service在在业务逻辑层使用
- @Repository在持久层使用
- @Component在普通类中使用
@Configuration、@Bean
- @Configuration代表类是一个配置类,并且会被cglib进行代理
- @Configuration还可以配合@Bean进行使用
- @Configuration注解表明其主要目的是作为bean定义的源;
- @Configuration类允许通过调用同一类中的其他@Bean方法来定义bean之间的依赖关系
- Full 模式 Lite 模式 @Configuration(proxyBeanMethods=true)是默认情况,也就是Full模式,如果proxyBeanMethods=false表示Lite模式,区别是Full被cglib代理然后从IOC容器中找对象,如果有就返回,也就是说每次只会返回相同对象,也就是单实例,Lite不被代理每次都会new一个新对象
/**
* 1、使配置类变成了full类型的配置类,spring在加载Appconfig的时候,Appconfig由普通类型转变为cglib代理类型 ,
* 2、在 @Bean method中使用,是单例的,不会创建对个对象
*/
@Configuration(proxyBeanMethods=true)//(proxyBeanMethods=true)默认配置,可不用
public class AppConfig {
@Bean
public User user(){
return new User();
}
@Bean
public Cat cat(){
return new Cat();
}
@Bean
//条件注解,只有TestConditional返回为true时,才能实例化animal
@Conditional(value = TestConditional.class)
public Animal animal(){
//使用@Configuration从IOC中拿对象,不会每次new cat
return new Animal (cat());
}
@ResponseBody
一般和@Controller搭配使用,可以放到类上也可以放到方法上,主要作用表示该方法的返回结果直接写入 HTTP response body 中,而不会被解析为跳转路径,也就是说不会经过视图解析器。简单点就是@ResponseBody会把对象转换成json格式的数据返回到前端
@Controller
@ResponseBody
public class HelloController {
@Autowired
Person person;
@GetMapping("/hello")
//@ResponseBody
public String hello(){
return "hello spring boot";
}
@RestController
@RestController是一个组合注解包含@Controller、@ResponseBody,现在控制层一般用这个
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}
@AutoWired、@Qualifier、@Resource
这3个注解主要是从容器中找到通过@Controller、@Service、@Repository、@Component等注解的bean
- 一般用@Autowired就够了
- 其中**@Qualifier**则需要配合@AutoWired使用
- @Resource相当于@AutoWired和@Qualifier的组合
@Autowired
业务逻辑层通过@Service把类注入到IOC容器,这里也已经把UserService接口给注入到IOC容器中了
通过@Autowired直接拿接口
也可以直接拿实现类
@ Autowired
UserServiceImpl userServiceImpl;
@AutoWired和@Qualifier
当一个接口有多个实现类时,需要两个注解配合使用,下面有两个接口实现,在@Service(“userServiceImpl”)和@Service(“userServiceImpl1”)
在使用的时候需要加上@Service(“userServiceImpl”)配置的名字
@Resource
这个注解相当于@AutoWired和@Qualifier的组合
用法如下