SpringBoot2入门必读(2):Spring boot的常用注解

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的组合
用法如下
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值