9大SpringBoot核心注解详解(建议收藏)

文摘   2024-08-30 12:59   四川  

关注mikechen的架构笔记十余年BAT架构经验倾囊相授


大家好,我是mikechen。

SpringBoot注解是SpringBoot的核心,也是是大厂经常考察对象,下面我就重点详解9大最常见的SpringBoot注解@mikechen


最新mikechen原创超30万字《阿里架构师进阶专题合集》和《最全大厂面试题及答案总结》,请关注本公众号【mikechen的架构笔记】,后台回复:资料,即可领取。


启动注解@SpringBootApplication

SpringBoot启动类注解,它是 Spring Boot 的核心注解,如下所示:

@SpringBootApplicationpublicclassStartEurekaApplication{publicstaticvoidmain(String[] args){SpringApplication.run(StartEurekaApplication.class, args);}}

这个注解是Spring Boot最核心的注解,用在 Spring Boot的主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。

实际上@SpringBootApplication注解,主要组合包含:

  1. @Configuration;

  2. @EnableAutoConfiguration;

  3. @ComponentScan;

是以上这三个注解的组合,由于这些注解一般都是一起使用,所以Spring Boot提供了一个统一的注解@SpringBootApplication。

自动配置@EnableAutoConfiguration

Spring Boot自动配置注解,开启这个注解之后,此注释自动载入应用程序所需的所有Bean——这依赖于Spring Boot在类路径中的查找。

@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration {     String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";     Class<?>[] exclude() default {};         String[] excludeName() default {}; }


组件扫描@ComponentScan

组件扫描其实很简单,@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中。

比如:

@ComponentScan(“com.mikechen.test”)@SpringBootApplicationpublic class SpringbootApplication {

这么做扫描的范围扩大到整个父包com.mikechen.test包。

@ComponentScan注解默认就会装配标识了:

  • @Controller

  • @Service

  • @Repository

  • @Component

等这些注解的类到spring容器中,下面我分别详解。

@Service注解

@Service注解用于类上,标记当前类是一个service类,加上该注解会将当前类自动注入到spring容器中,不需要再在applicationContext.xml文件定义bean了。

比如:

@Service("courseDAO")@Scope("prototype")public class CourseDAOImpl extends HibernateDaoSupport implements CourseDAO{        ...    }

然后就可以使用了,如下所示:

@Autowriedprivate CourseDAOImpl  courseDAOImpl;


@Repository注解

用于标注数据访问组件,即DAO组件。

使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

具体示例,如下:

@Repositorypublic class UserDaoImpl implements UserDao{        @Override    public int insertUser(){        JdbcTemplate template = new JdbcTemplate();        ...    }}


@Component注解

@component是spring中的一个注解,它的作用就是实现bean的注入。

在Java的web开发中,提供3个@Component注解衍生注解分别是:

1)@Controller 控制器注入服务,用于标注控制层;

2)@Service 服务注入dao,用于标注服务层,主要用来进行业务的逻辑处理;

3)@Repository实现dao访问,用于标注数据访问层,即DAO组件;

而@Component泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

@RestController注解

在一个类上添加@Controller注解,表明了这个类是一个控制器类,类似struts中的action。

RestController注解可以直接返回一个对象,配合fastjson,可以将对象转换为json字符串返回给前端,适合ajax异步调用的场景,也是前后端分离中使用最频繁的开发方式。

具体示例如下:

@RestController@RequestMapping("/user")public class UserController {
@RequestMapping("/test") public Map addGoodsToCartList(Long itemId, Integer num) { Map map = new HashMap(); map.put("success", true); map.put("message", "welcome"); return map; }}


@Bean注解

@Bean:Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。

相当于XML中的<bean></bean>,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。

具体示例,如下:

@Configurationpublic class BeanConfig {     @Bean    public Person person() {        return new Person("mikechen");    } }


@ResponseBody注解

@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。

具体示例如下:

@Controllerpublic class HelloWorld {    @RequestMapping("/hello")    @ResponseBody    public String testSpringBoot() {        return "Hello SpringBoot 2 !";    }}


@AutoWired注解

@autowired注解,来源于英文单词autowire,这个单词的意思是自动装配的意思。

@AutoWired注解的作用:主要就是把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

具体示例,比如用于set方法上:

public class SimpleMovieLister {     private MovieFinder movieFinder;     @Autowired    public void setMovieFinder(MovieFinder movieFinder) {        this.movieFinder = movieFinder;    }     // ...}


以上


最后送大家一个福利:

送我原创超30万字阿里架构师进阶专题合集


以及给大家整理最全大厂Java面试题及答案详解,包含:Java、多线程、JVM、Spring、MySQL、Redis、中间件...等必考题答案详解。


需要以上架构专题&面试答案的同学,加我微信即可领取!


添加时备注:资料






mikechen的架构笔记
十余年BAT架构经验倾囊相授!
 最新文章