SpringMVC学习中遇到的不懂注解记录

文章目录

    • [@Autowrite 和 @Resource](#@Autowrite 和 @Resource)
    • [@Qualifier 和 @Primary](#@Qualifier 和 @Primary)
    • @PathVariable
    • [@Controller、@Service、@Repository 和 @Component](#@Controller、@Service、@Repository 和 @Component)

@Autowrite 和 @Resource

我们先讲讲 @Autowrite 注解 吧。

复制代码
public class StudentService3 implements IStudentService {
  //@Autowired
  private IStudentDao studentDao;
 
  private String id;
  
  public void setId(String id) {
       this.id = id;
   }

配置之后,Spring 会在容器中(这个注解是Spring的),先去寻找 IStudentDao这个类型的 Bean,如果有 ,则会去匹配。也就是所谓的 "按照类型分配" 。但是 如果没有的情况下,则会 去容器中 找 相同名称(studentDao)的 Bean 。如果有,则会选择后者这种情况。也就是所谓的 "按照名称分配" 。
总结一下:@Autowrite 会优先 去寻找 相同类型的 bean ,其次再去找 相同 名称的bean。
接下来,我们再聊聊 @Resource 这个注解。
这个注解可不是 Spring 的哦,@Resource 这个注解 是 JDK 内置的注解。刚好跟上面注解 的某种含义在 用法上相反。看下面的总结基本上就能很清晰的明白了。
总结一下:@Resource 会优先 去寻找 相同名称 的 bean ,其次再去找 相同 类型的bean。
以上就是 @Autowrite 和 @Resource 的区别

@Qualifier 和 @Primary

废话不多说 , 先上例子。

复制代码
    @Component("fooFormatter")
    public class FooFormatter implements Formatter {
        public String format() {
            return "foo";
        }
    }

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

    @Component
    public class FooService {
        @Autowired
        private Formatter formatter;
        
        //todo 
    }

此时此刻,我们假如用 @Autowrite 的话,没有指定其他限制条件,肯定难以注入呀。它们的类型都相同。会报异常。
借用 AI 一句话:

.

如果使用 @Autowired 注解,并且没有提供其他限定条件(如 @Qualifier 注解),Spring将会因为无法确定应该注入哪一个bean而抛出异常。

如果使用了 @Qualifier 注解来指定哪一个bean应该被注入,那么Spring将会注入指定的bean。
此时此刻,应该明白了 @Qualifier 这个注解的含义了吧。嘿嘿。
@Parmary呢?
我用一句话解释一下: @Parmary 定义的是默认值,而 @Qualifier 指的非常彻底。就比如说,我就要你!优先值很高。而 @Parmary 所说的是,我默认是你,优先值相对来说,比较低。
所以,明白了嘛 ~~ 。

@PathVariable

废话不多说,直接上代码。

复制代码
@RequestMapping("/getUserById/{name}")
    public User getUser(@PathVariable("name") String name){
        return userService.selectUser(name);
    }

这个注解是用来传递参数的,虽然有简写,但是不推荐,简写在此处就先略过。

@Controller、@Service、@Repository 和 @Component

@Component 是一个总体,分别区分了以下这个三层架构。

.

三层架构分别是:

控制层(@Controller) ⇒ 控制层,用来处理用户传递过来的请求等。

服务层(@Service) ⇒ 业务逻辑处理层,用来处理 业务逻辑 的层面、

持久层(@Repository) ⇒ 数据访问层,用来标注(不是处理!)数据访问组件,例如 Dao 组件以及实现类 等。主要用于(标注)数据库。

相关推荐
吃喝不愁霸王餐APP开发者5 分钟前
Java后端系统对接第三方外卖API时的幂等性设计与重试策略实践
java·开发语言
roman_日积跬步-终至千里6 分钟前
【人工智能导论】08-学习-如何让计算机理解序列数据——用RNN/LSTM建模时序依赖,用文本嵌入表示序列元素
人工智能·rnn·学习
TG:@yunlaoda360 云老大11 分钟前
华为云国际站代理商的CBR主要有什么作用呢?
java·网络·华为云
m0_6896182813 分钟前
30 分钟打印!多材料3D打印软机器人内置驱动 + 自主避障
笔记·学习·机器人
charlie11451419139 分钟前
现代嵌入式C++教程:C++98——从C向C++的演化(2)
c语言·开发语言·c++·学习·嵌入式·教程·现代c++
速易达网络1 小时前
基于Java TCP 聊天室
java·开发语言·tcp/ip
Rousson1 小时前
硬件学习笔记--93 静电防护方案(电阻、磁珠、电感、TVS等)
笔记·单片机·学习
沿着路走到底1 小时前
JS事件循环
java·前端·javascript
思成不止于此1 小时前
【MySQL 零基础入门】事务精讲(二):ACID 特性与并发问题
数据库·笔记·学习·mysql
爱笑的眼睛111 小时前
超越 `cross_val_score`:深度解析Scikit-learn交叉验证API的架构、技巧与陷阱
java·人工智能·python·ai