Spring相关注解详细版

发布于:2024-06-16 ⋅ 阅读:(30) ⋅ 点赞:(0)
1、@RestController @RequestMapping("/api")这两个的作用分别是什么?如何相互区分?

   @RestController 注解用于标识一个类是RESTful风格的Controller,它会将方法的返回值直接转换为HTTP响应体,通常用于返回JSON或XML格式的数据。如果一个类没有 @RestController 注解,Spring将不会将其识别为一个Controller类,也就无法处理HTTP请求。

         @RequestMapping 注解用于映射HTTP请求路径到Controller类或方法上。它可以用于类级别和方法级别,用于定义处理请求的路径。如果一个方法没有 @RequestMapping 注解,Spring将不会将其识别为一个请求处理方法,也就无法处理对应的请求。

2、 @configuration的作用以及@bean的作用?

 @configuration是Spring框架中的一个注解,用于定义配置类,配置类相当于传统的Spring XML配置文件,用来定义bean。

  • @Configuration注解的类会被Spring容器识别并用来生成bean定义和服务请求。

示例:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

 在Spring框架中,@Bean注解的主要作用是告诉Spring容器一个方法会返回一个对象,该对象需要注册为Spring应用上下文中的一个bean。具体来说,@Bean通常用于配置类中,并用于定义生成bean的方法。

以下是@Bean注解的一些主要作用和用途:

  1. 定义bean@Bean注解的方法会返回一个对象,该对象将被Spring容器管理。可以在该方法中配置对象的初始化、配置和依赖关系。

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

      2.自定义初始化和销毁方法:可以在@Bean注解中指定自定义的初始化和销毁方法。

@Bean(initMethod = "init", destroyMethod = "cleanup")
public MyService myService() {
    return new MyServiceImpl();
}

      3.依赖注入@Bean方法可以使用参数来表明依赖关系,Spring容器会自动注入这些依赖。

@Bean
public MyService myService(Dependency1 dep1, Dependency2 dep2) {
    return new MyServiceImpl(dep1, dep2);
}

      4.作用域:可以使用@Bean注解来指定bean的作用域(如单例、原型等)。

@Bean
@Scope("prototype")
public MyService myService() {
    return new MyServiceImpl();
}

      5.条件化创建:通过结合其他注解(如@Conditional),可以根据某些条件有选择地创建bean。

@Bean
@Conditional(MyCondition.class)
public MyService myService() {
    return new MyServiceImpl();
}
3、 @Autowired的作用是什么?

 在Spring框架中,@Autowired注解用于实现自动依赖注入。它告诉Spring框架自动装配依赖对象。也就是说,Spring容器会自动寻找和注入匹配的bean到标记了@Autowired注解的字段、构造器或方法中。以下是@Autowired注解的主要作用和用法:

自动注入依赖@Autowired 告诉 Spring 容器将匹配的 Bean 自动注入到标注了 @Autowired 的构造函数、方法或字段中。

简化依赖管理:不需要显式地在代码中手动创建或获取依赖对象,Spring 容器会自动处理依赖关系,使代码更加简洁和可维护。

支持不同的注入方式:支持构造函数注入、方法注入和字段注入。

4、 @Component的作用是什么?@Component和@bean的区别是什么?

@Component 是 Spring 框架中的一个注解,用于将一个类标记为 Spring 的组件(Bean),使其可以被 Spring 容器自动检测、管理和注入。@Component 是一个通用的注解,可以用于任何层的组件。Spring 容器在启动时会扫描带有 @Component 注解的类,并将其实例化、配置并注册到容器中 。

@Component 的作用:

  1. 将类声明为 Bean:使用 @Component 注解的类会被 Spring 自动识别为 Bean,并纳入 Spring 容器的管理中。
  2. 自动扫描和装配:Spring 容器会自动扫描带有 @Component 注解的类并自动实例化它们。
  3. 简化配置:使用 @Component 可以减少 XML 配置文件中的手动 Bean 定义,简化配置过程。

@Component和@bean的区别:

使用场景

  • @Component:用于注解类。通常用于告诉 Spring 这个类需要被作为一个组件进行扫描并管理。它是类级别的注解,适用于那些你直接定义在类上的 Bean。
  • @Bean:用于注解方法。通常用于告诉 Spring 这个方法的返回值需要作为一个 Bean 被管理。它是方法级别的注解,适用于那些你需要以编程的方式创建和配置的 Bean。

使用方式

  • @Component:结合组件扫描(如 @ComponentScan)使用,适合自动发现和装配。
  • @Bean:结合配置类(如 @Configuration)使用,适合显式定义和配置复杂的 Bean。
5、 @Aspect的作用?

 @Aspect 是 Spring AOP(Aspect-Oriented Programming,面向切面编程)中的一个注解,用于定义一个切面(Aspect)。切面是一种横切关注点的模块化表示,它可以用于集中处理诸如日志记录、安全、事务管理等系统级服务,而无需在各个业务逻辑代码中重复这些代码。

@Aspect 的作用:

  1. 定义切面@Aspect 用于声明一个类为切面,切面包含了多个关注点(如日志记录、事务管理等)的具体实现。
  2. 模块化横切关注点:通过切面,可以将那些分散在各个类中的横切关注点代码模块化,提升代码的可维护性和可重用性。
  3. 声明通知(Advice):在切面类中可以定义各种类型的通知(Advice),如前置通知、后置通知、环绕通知、异常通知等,通过这些通知可以在方法执行的不同阶段进行切入。

AOP 基本概念:

  • 切面(Aspect):一个关注点的模块化表示。
  • 连接点(Join Point):程序执行的某个具体点。
  • 通知(Advice):切面在连接点处执行的代码。
  • 切入点(Pointcut):匹配连接点的表达式。
  • 目标对象(Target Object):被通知的对象。
  • 代理(Proxy):通知目标对象后创建的对象。
  • 织入(Weaving):将切面应用到目标对象来创建代理对象的过程。
6、@Resourse 的作用?和@Autowired注解的区别是什么?

主要作用

  1. 注入依赖@Resource 用于自动注入依赖对象,类似于 Spring 框架中的 @Autowired 注解。
  2. 名称匹配@Resource 默认按名称匹配(通过字段名或方法名),如果名称匹配不上,再按类型匹配。
  3. 简化配置:简化配置,使代码更加简洁,便于理解和维护。

@Autowired 的对比

  • 匹配方式

    • @Resource:默认按名称匹配,找不到匹配时按类型匹配。
    • @Autowired:默认按类型匹配,可以结合 @Qualifier 注解按名称匹配。
  • 来源

    • @Resource:属于 Java EE 标准,适用于任何兼容 JSR-250 的框架和容器。
    • @Autowired:属于 Spring 框架特有的注解。
  • 配置灵活性

    • @Resource:支持 nametype 属性来精确控制注入。
    • @Autowired:可以与 @Qualifier 配合使用,提供更灵活的配置选项。

 

7、 @Qualifier的作用是什么?

@Qualifier 注解是 Spring 框架中用于在依赖注入时区分多个 Bean 的注解。当一个类型有多个候选 Bean 时,@Qualifier 注解可以与 @Autowired@Inject 注解结合使用,以指定需要注入的具体 Bean。它的作用是通过名称来明确指定要注入的 Bean,解决歧义问题。

主要作用

  1. 解决歧义:在同一个类型有多个 Bean 时,通过 @Qualifier 注解指定要注入的 Bean 名称,解决依赖注入的歧义。
  2. 精确注入:与 @Autowired@Inject 注解结合使用,实现精确的依赖注入。

 

示例如下: 

public interface MyService {
    void performAction();
}

@Service("serviceA")
public class ServiceA implements MyService {
    @Override
    public void performAction() {
        System.out.println("ServiceA performing action");
    }
}

@Service("serviceB")
public class ServiceB implements MyService {
    @Override
    public void performAction() {
        System.out.println("ServiceB performing action");
    }
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class MyComponent {

    private final MyService myService;

    @Autowired
    public MyComponent(@Qualifier("serviceA") MyService myService) {
        this.myService = myService;
    }

    public void doSomething() {
        myService.performAction();
    }
}

 

 



网站公告

今日签到

点亮在社区的每一天
去签到