SpringBoot注解(9个最常用核心注解详解)

SpringBoot注解(9个最常用核心注解详解)-mikechen

启动注解@SpringBootApplication

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

@SpringBootApplication
publicclassStartEurekaApplication
{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”)
@SpringBootApplication
public 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{
        ...    
}

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

@Autowried
private CourseDAOImpl  courseDAOImpl;

 

@Repository注解

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

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

具体示例,如下:

@Repository
public 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管理。

具体示例,如下:

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

 

@ResponseBody注解

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

具体示例如下:

@Controller
public 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;
    }
 
    // ...
}

 

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法