启动注解@SpringBootApplication
SpringBoot启动类注解,它是 Spring Boot 的核心注解,如下所示:
@SpringBootApplication publicclassStartEurekaApplication {publicstaticvoidmain(String[] args) {SpringApplication.run(StartEurekaApplication.class, args); } }
这个注解是Spring Boot最核心的注解,用在 Spring Boot的主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。
实际上@SpringBootApplication注解,主要组合包含:
- @Configuration;
- @EnableAutoConfiguration;
- @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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》