文章

Spring注解式开发

Sping注解式开发

一、Bean声明的注解

  • @Component
  • @Service
  • @Repository
  • @Controller

⭐️:Service、Repository、Controller都是Component的别名,本质代码没有区别

名字的不同是为了方便语义化编程、见名知意

二、负责注入Bean参数的注解

  • @Value

    • 当参数属性是简单类型的时候,可以使用@value进行注入
  • @Autowired

    • 自动装载,根据类型自动装载复杂数据类型
  • @Qualifier

    • 当Autowired根据参数名称匹配到多个实现类时,会报错
    • 此时用@Qualifier指定装载某一个具体的实现类(根据名称)
  • @Resource

    • 默认情况下根据名称来装载
    • 当用名称找不到时,根据类型装载
    • 如果是JDK8的话不需要额外引入依赖。高于JDK11或低于JDK8需要引入以下依赖。
1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- spring6+ -->
<dependency>
  <groupId>jakarta.annotation</groupId>
  <artifactId>jakarta.annotation-api</artifactId>
  <version>2.1.1</version>
</dependency>

<!-- spring5- -->
<dependency>
  <groupId>javax.annotation</groupId>
  <artifactId>javax.annotation-api</artifactId>
  <version>1.3.2</version>
</dependency>

三、完全抛弃xml配置文件

用类来配置Spring,不在写xml,通过注解来对Spring做配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.powernode.spring6.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import org.springframework.context.annotation.Configuration;

// 声明这是一个配置类
@Configuration
// 配置扫描加载bean的范围
@ComponentScan({"com.powernode.spring6.dao", "com.powernode.spring6.service"})
public class Spring6Configuration {
}
@Test
public void testNoXml(){
    // 注意这里不再用ClassPathXmlApplicationContext了
    ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Spring6Configuration.class);
    UserService userService = applicationContext.getBean("userService", UserService.class);
    userService.save();
}
本文由作者按照 CC BY 4.0 进行授权