前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

面试官:SpringBoot里面有哪些重要的注解?

今天咱们聊聊Spring Boot里面那些让人“恨不得立刻记住”的注解。说实话,每次面试都绕不开Spring Boot的注解相关问题,尤其是配置类、主类这些核心点,弄不好直接变成面试“滑铁卢”。

那么话不多说,我来细细捋一捋这些注解背后的知识点,还给大家来点代码举例和面试场景模拟。

先从最熟悉的@@SpringBootApplication说起吧。

这个注解几乎是Spring Boot应用的开门砖。它同时包含了以下三个注解的功能:

  • @SpringBootConfiguration:标识当前类是配置类,相当于传统Spring中的@Configuration
  • @EnableAutoConfiguration:开启Spring Boot的自动配置功能。
  • @ComponentScan:让Spring Boot扫描标注了@Component@Service@Repository@Controller等注解的类,把它们注册到Spring容器中。

用法很简单,一般直接加在主类上:

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

注意,主类一般放在项目根包下,这样@ComponentScan就能自动扫描子包里的所有组件。如果有自定义扫描路径需求,可以直接指定:

@SpringBootApplication(scanBasePackages = "com.example.custom")

再来说说Spring中常见的几个核心注解:@Controller、@RestController、@Service、@Repository、@Component

这些注解的作用很好理解,归根结底就是为了解决分层的问题。

@Controller这是MVC架构中控制器的标志,用来处理用户的HTTP请求。通常返回的是视图页面的名称。

@Controller
public class HomeController {
    @RequestMapping("/home")
    public String home() {
        return "home"; // 返回的是视图的名字,比如 home.html
    }
}

@RestController这个是@Controller@ResponseBody的结合体,直接返回数据而不是视图。

@RestController
public class ApiController {
    @GetMapping("/api/data")
    public String getData() {
        return "Hello, World!"; // 直接返回JSON格式的数据
    }
}

@Service用于标识服务层,主要承载业务逻辑,没啥特殊功能,但能让代码更清晰。

@Service
public class UserService {
    public String getUserById(Long id) {
        return "User_" + id;
    }
}

@Repository专为数据访问层设计,主要是标记数据库操作的类,Spring会为它生成代理类,处理异常。

@Repository
public class UserRepository {
    public List<String> findAllUsers() {
        return List.of("User1", "User2", "User3");
    }
}

@Component是个通用型的注解,所有受Spring管理的类都能用它来标记。但为了分层清晰,尽量用上面具体的注解。

@Component
public class GenericComponent {
    public void doSomething() {
        System.out.println("Doing something...");
    }
}

自动装配的神器:@Autowired

当某个类需要使用Spring容器里的Bean时,用@Autowired可以直接注入。它支持字段注入、构造方法注入和Setter注入。推荐构造方法注入,代码更清晰,而且方便测试。

@Service
public class ProductService {
    private final UserRepository userRepository;

    @Autowired
    public ProductService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public void process() {
        userRepository.findAllUsers().forEach(System.out::println);
    }
}

与配置相关的注解:@Configuration和@Value

@Configuration这是Spring用来定义配置类的核心注解。所有用@Bean标注的方法,都会生成一个Spring容器里的Bean实例。

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

@Value主要用于注入配置文件中的属性值。

app.name=MyApp
@Component
public class AppProperties {
    @Value("${app.name}")
    private String appName;

    public String getAppName() {
        return appName;
    }
}

路径映射注解:@RequestMapping和派生注解

  • @RequestMapping:用来指定Controller的请求路径和HTTP方法。
  • @GetMapping@PostMapping@PutMapping@DeleteMapping:这些是@RequestMapping的简化版。
@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id) {
        return "User_" + id;
    }
}

好了,我们来看看面试中Spring Boot注解相关问题

  • @SpringBootApplication的作用是什么?它包含了哪些注解? 最优回答:@SpringBootApplication是Spring Boot应用的入口点,包含了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan
  • @Autowired默认按什么方式注入?如何避免循环依赖? 最优回答:@Autowired默认按类型注入,通过@Qualifier可以按名称注入。避免循环依赖的方法包括使用构造方法注入和拆分依赖关系。
  • @Configuration和@Bean的区别是什么? 最优回答:@Configuration标记一个类为配置类,而@Bean标记一个方法返回的对象是Spring容器管理的Bean。
  • Spring Boot如何加载配置文件的? 最优回答:Spring Boot默认加载application.propertiesapplication.yml,优先级从类路径的config目录到类路径根目录,再到外部配置文件。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言