首页 > 其他分享 >spring - mvc

spring - mvc

时间:2024-03-07 17:33:06浏览次数:11  
标签:Qualifier spring Primary class 注释 bean mvc public

spring mvc

1.@Autowired

@Component
public class FooService {  
    @Autowired
    private FooFormatter fooFormatter;
}

2.通过@Qualifier自动装配

例如,让我们看看如何使用@Qualifier注释来指示所需的 bean。
首先,我们将定义 2 个Formatter类型的 bean :

@Component("fooFormatter")
public class FooFormatter implements Formatter {
    public String format() {
        return "foo";
    }
}
@Component("barFormatter")
public class BarFormatter implements Formatter {
    public String format() {
        return "bar";
    }
}

我们可以通过使用@Qualifier注释缩小实现范围来避免这种情况:

public class FooService {
    @Autowired
    @Qualifier("fooFormatter")
    private Formatter formatter;
}

当有多个相同类型的 bean 时,最好使用@Qualifier以避免歧义。
请注意, @Qualifier注释的值与我们的FooFormatter实现的@Component注释中声明的名称匹配。

3.通过自定义限定符自动装配

Spring还允许我们创建自己的自定义@Qualifier注释。为此,我们应该为@Qualifier注释提供定义:

@Qualifier
@Target({
  ElementType.FIELD, ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface FormatterType {  
    String value();
}

然后我们可以在各种实现中使用FormatterType 来指定自定义值:

@FormatterType("Foo")
@Component
public class FooFormatter implements Formatter {
    public String format() {
        return "foo";
    }
}
@FormatterType("Bar")
@Component
public class BarFormatter implements Formatter {
    public String format() {
        return "bar";
    }
}

最后,我们的自定义限定符注释已准备好用于自动装配:

@Component
public class FooService {  
    @Autowired
    @FormatterType("Foo")
    private Formatter formatter;
}

@Target元注释中指定的值限制了限定符的应用位置,在我们的示例中是字段、方法、类型和参数。

@Qualifier与@Primary
还有另一个名为@Primary的注释 ,当依赖注入存在歧义时,我们可以使用它来决定注入哪个 bean。
该注释定义了存在多个相同类型的 bean 时的偏好。除非另有说明,否则将使用与@Primary注释关联的 bean 。
让我们看一个例子:

@Configuration
public class Config {
 
    @Bean
    public Employee johnEmployee() {
        return new Employee("John");
    }
 
    @Bean
    @Primary
    public Employee tonyEmployee() {
        return new Employee("Tony");
    }
}

在此示例中,两个方法都返回相同的Employee类型。Spring 将注入的 bean 是tonyEmployee方法返回的 bean 。这是因为它包含@Primary注释。当我们想要指定默认情况下应注入某种类型的 bean时,此注释非常有用。
如果我们在某个注入点需要其他 bean,我们需要特别指出。我们可以通过@Qualifier注释来做到这一点。例如,我们可以通过使用@Qualifier注释来指定要使用johnEmployee方法返回的 bean 。
值得注意的是,如果@Qualifier和@Primary注解同时存在,那么@Qualifier注解将优先。基本上,@Primary定义了默认值,而@Qualifier则非常具体。
让我们看看使用@Primary注释的另一种方式,这次使用最初的示例:

@Component
@Primary
public class FooFormatter implements Formatter {
    //...
}

@Component
public class BarFormatter implements Formatter {
    //...
}

在这种情况下,@Primary注释被放置在实现类之一中,并将消除场景的歧义。

4.解释模型属性 @ModelAttribute注解是 Spring MVC中最重要的注解之一

@ModelAttribute注释

5.解释一下@Controller和@RestController之间的区别

@Controller和@RestController注释之间的主要区别在于@ResponseBody注释自动包含在@RestController中。这意味着我们不需要使用@ResponseBody注释我们的处理程序方法。如果我们想将响应类型直接写入 HTTP 响应正文,我们需要在 @Controller类中执行此操作。

标签:Qualifier,spring,Primary,class,注释,bean,mvc,public
From: https://www.cnblogs.com/dkpp/p/18059405

相关文章

  • SpringBoot3+Consul配置,启动后,居然不读bootstrap.yml的配置文件,直接连本地localhost:8
    问题描述如题。bootstrap.yml的配置文件: consul控制台打印的日志: 解决方案:booststrap.yml的配置文件缩进搞错了,所以压根就没有读到配置。正确的缩进:  ......
  • spring-webClient-响应式http客户端
    1.WebClient简介WebClient是SpringWebFlux模块提供的一个非阻塞的基于响应式编程的进行Http请求的客户端工具。WebFlux对标SpringMvc,WebClient相当于RestTemplate,同时也是Spring官方的Http请求工具。2.传统阻塞IO模型VS响应式IO模型传统阻塞IO模型RestTem......
  • spring-restTemplate-网络请求
    1,引言  现如今的IT项目,由服务端向外发起网络请求的场景,基本上处处可见!传统情况下,在服务端代码里访问http服务时,一般会使用JDK的HttpURLConnection或者Apache的HttpClient,不过这种方法使用起来太过繁琐,而且api使用起来非常的复杂,还得操心资源回收。  RestTempl......
  • Spring-@Bean-注解
    1.作用用于将对象存入spring的ioc容器中。@controller、@Service、@Component、@Configuration、@Repository等几个注解是一样的,都是负责将对象存入容器当中,而@Bean是用在方法上,将当前方法的返回值对象放到容器当中。2.使用@Bean一般出现在方法上面,也可用于自定义......
  • 若依集成CIM(即时推送系统)实现将服务端修改为SpringBoot+Vue前后端分离版(文末见代码
    ​ 场景若依前后端分离版本地搭建开发环境并运行项目的教程:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662 CIMGitee地址:https://gitee.com/farsunset/cimCIM项目是基于mina或者netty框架下的推送系统,我们平常使用第三方的推送SDK,如极光推送,百度......
  • Spring-@ControllerAdvice-全局处理注解
    1,@ControllerAdvice介绍@ControllerAdvice是Spring框架提供的一个注解,用于定义全局的异常处理器和全局数据绑定。它通常用于集中处理应用程序中的异常,并提供统一的异常处理逻辑。2,@ControllerAdvice的基本使用packageorg.springframework.web.bind.annotation;importj......
  • spring-JSON序列化
    1,使用场景。SpringBoot默认json为JackJson。在Controller需要返回Json数据时,我们使用了RestController,如果想对返回的数据进行一定的处理,也就是序列化对象为Json时使用。反序列化,就是当接收的参数想做一定处理,获取到处理后的数据时候。2,JsonSerializer序列化1,自定......
  • spring-HandlerMethodArgumentResolver-参数解析器
    1,参数解析器介绍  HandlerMehtodArgumentResolver,中文成为方法参数解析器,是SpringMvc组件的众多解析器之一,主要用来对Controller的方法参数进行处理。2,参数解析器的使用1,实现HandlerMethodArgumentResolver,自定义解析器publicclassMyHandlerMethodArgumentResolver......
  • Spring-@Validated-参数校验
    1.什么是javax.validationJSR303是一套JavaBean参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们JavaBean的属性上面(面向注解编程的时代),就可以在需要校验的时候进行校验了,在SpringBoot中已经包含在starter-web中,再其他项目中可以引用依赖,并自行......
  • Springcloud Alibaba-8-链路追踪
    1.基本概念在微服务架构中,一个请求可能需要调用很多个服务,若其中出现了错误很难去定位。链路追踪,就是将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等......