Bean基本注解开发和Bean依赖注入注解开发

news2024/11/28 20:40:15

目录

1.Bean基本注解开发

@Component

@Score@lazy

@PostConstruct和@PreDestroy

@Repository@Service@Controller

2.Bean依赖注入注解开发

@Value

@Autowired

@Qualifier

@Resource

扩展AutoWired


1.Bean基本注解开发

基本Bean注解,主要是使用注释的方式替代原有xml的<bean>标签及其标签属性的配置

<bean id=" " name="" class="" scope="" lazy-init="" 
init-method="" destroy-method="" abstract="" 
autowire="" factory-bean="" 
factory-method=""></bean>

@Component

使用注解替代<bean> 标签

//Component注解 必须写类上面 可以起别名(没有起别名默认类名小写)

被该注解标识的类,会在指定扫描范围内被spring加载并实例化

使用步骤1,更改配置文件的头添加注解 2.添加扫描

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
">

 <!--spring需要通过注解的方式将类放到spring容器中 需要配置一个标签 context 告诉spring容器去哪里扫描注解-->
<!-- 告诉spring容器将那个包下具有注解的类放置spring容器中-->
    <context:component-scan base-package="com.rocky"></context:component-scan>

</beans>
@Component("user")
public class User {
    private Integer id;
    private String uname;
    private String password;
}

@Score@lazy

@PostConstruct和@PreDestroy

<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
需要引入依赖
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>
  @PostConstruct
    public void init(){
        System.out.println("init User");
    }


    @PreDestroy
    public void destroy(){
        System.out.println("destroy user");
    }

@Repository@Service@Controller

由于JavaEE开发是分层的,为了每层Bean标识的注解语义化更加明确,@Component又衍生出如下三个注解:

2.Bean依赖注入注解开发

Bean依赖注入的注解,主要是使用注解的方式替代XML的<property>标签完成属性的注入操作

<bean id="" class="">
        <property name="" value=""></property>
        <property name="" ref=""></property>
    </bean>

@Value

@Component
public class User {
    @Value(value = "zhangsan")
    private String name;
    @Value("20")
    private int age;


    @Value("李四")
    public void setName(String name) {
        this.name = name;
    }

 public User(@Value("隔壁老王") String name, @Value("33") int age) {
        this.name = name;
        this.age = age;
    }

@Value注解可以出现在属性上、setter方法上、以及构造方法的形参上

@Autowired

Autowired注解可以用来注入非简单类型。单独使用@Autowired注解,默认根据类型装配

@Autowired根据类型注入
//如果有多个实现了接口的对象,那么我们必须和bean的参数名称匹配
//传递的参数和bean名称(id一致)

 @Autowired // 在属性上注入
    private UserDao userDao;

   @Autowired
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

   @Autowired
    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

 public UserService(@Autowired UserDao userDao) {
        this.userDao = userDao;
    }

@Qualifier

@Autowired注解默认是byType进行注入的,也就是说根据类型注入的,如果以上程序中,UserDao接口还有另外一个实现类,会出现问题

/Qualifier 指的是将spring容器中的名字匹配到方法参数中,和方法参数的名称无关
//必须和autowired组合使用byName,根据名称进行装配了。

@Autowired注解和@Qualifier注解联合起来才可以根据名称进行装配,在@Qualifier注解中指定Bean名称。

@Autowired()
@Qualifier("mysqlDao") //类没有指定别名时 使用类名 首字母小写
    public void setUserDao( UserDao userDao) {
        this.userDao = userDao;
    }

@Resource

  • 相当于@Autowired 和 @Qualifier
  • @Resource注解默认根据名称装配byName,未指定name时,使用属性名作为name。通过name找不到的话会自动启动通过类型byType装配。
  • @Resource注解用在属性上、setter方法上。
  •  //不指定参数名称时,等同于autowired
       @Resource(name = "oracle")

扩展AutoWired

任何方法都可以根据AutoWired注入

   // Autowired还可以给普通方法传递参数
    @Autowired
    @Qualifier("bbb")
    public void hahha(UserDao userDao){

    }
    @Autowired
    public void xixixix(List<User> users){

    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/843637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录--说一说css的font-size: 0

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 平常我们说的font-size&#xff1a;0&#xff1b;就是设置字体大小为0对吧&#xff0c;但是它的用处不仅仅如此哦&#xff0c;它还可以消除子行内元素间额外多余的空白&#xff01; 问题描述&#xff…

Android前沿技术?Jetpack如何?

Jetpack Compose是Android开发领域的一项前沿技术&#xff0c;它提供了一种全新的方式来构建用户界面。近年来&#xff0c;Jetpack Compose在各大招聘等网站上的招聘岗位逐渐增多&#xff0c;薪资待遇也相应提高。本文将从招聘岗位的薪资与技术要求入手&#xff0c;分析Jetpack…

《Java-SE-第三十章》之哲学家就餐问题

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…

mongodb-win32-x86_64-2008plus-3.4.24-signed.msi

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.4\binC:\MongoDB\Server\3.4\bin>C:\MongoDB\Server\3.4\bin>mongod --help Options:General options:-h [ --help ] …

窥探系列之Mybatis-plus XML分页查询

mybatisPlus分页查询原理 searchCount字段控制是否查询总记录数 com.baomidou.mybatisplus.plugins.PaginationInterceptor 该插件拦截sql&#xff0c;如果searchCounttrue&#xff0c;则使用sql解析包jsqlparser根据原sql生成count语句&#xff0c;另外关键

面对裁员风险,我们该如何提升体能素质?——探讨年龄与体能的关系

文章目录 每日一句正能量前言你现在身体的体能状况如何&#xff1f;你有身体焦虑吗&#xff1f;如何保持规律性运动&#xff1f;你有哪些健康生活的好习惯&#xff1f;后记 每日一句正能量 当你看不到别人的缺点时&#xff0c;你就能从别人的行为、语言、思想中得到无限的智慧。…

数据结构 | 利用二叉堆实现优先级队列

目录 一、二叉堆的操作 二、二叉堆的实现 2.1 结构属性 2.2 堆的有序性 2.3 堆操作 队列有一个重要的变体&#xff0c;叫作优先级队列。和队列一样&#xff0c;优先级队列从头部移除元素&#xff0c;不过元素的逻辑顺序是由优先级决定的。优先级最高的元素在最前&#xff…

【程序环境与预处理玩转指南】

本章重点&#xff1a; 程序的翻译环境 程序的执行环境 详解&#xff1a;C语言程序的编译链接 预定义符号介绍 预处理指令 #define 宏和函数的对比 预处理操作符#和##的介绍 命令定义 预处理指令 #include 预处理指令 #undef 条件编译 1. 程序的翻译环境和执行环境 在…

Java基础入门篇——IntelliJ IDEA下载与安装(四)

IntelliJ IDEA是一款流行的Java集成开发环境&#xff08;IDE&#xff09;&#xff0c;由JetBrains公司开发。你可以按照以下步骤下载和安装IntelliJ IDEA&#xff1a; 一、下载 访问官方网站&#xff1a;打开浏览器&#xff0c;访问JetBrains的官方网站。你可以直接在搜索引擎…

SAP MM学习笔记15-物料调达中的Master数据(2)-品目Master

SAP中做一个购买发注的时候&#xff0c;涉及到以下Master数据&#xff1a; 1&#xff0c;仕入先Master&#xff08;供应商&#xff09;&#xff1a;跟谁买 2&#xff0c;品目Master&#xff08;物料&#xff09;&#xff1a;买什么 3&#xff0c;购买情报&#xff1a;什么价…

MONGODB ---- Austindatabases 历年文章合集

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

过滤器和拦截器的六大区别

平时觉得简单的知识点&#xff0c;但通常都不会太关注细节&#xff0c;一旦被别人问起来&#xff0c;反倒说不出个所以然来。真的就是一看就会一说就废。下面带大家一起结合实践来区分过滤器和拦截器吧~ 通俗理解&#xff1a; &#xff08;1&#xff09;过滤器&#xff08;Fil…

CMake 3.13.4 or higher is required. You are running version 3.10.2

ubuntu 安装 cmake&#xff0c;但是apt安装的版本太低&#xff0c;需要其他安装方法。 参考视频 https://www.youtube.com/watch?v_yFPO1ofyF0 以下是对视频内容的提炼&#xff0c;就两点 1、下载需要版本的sh文件&#xff1b;2、安装 一、下载需要版本的sh文件 https://cma…

【ArcGIS Pro二次开发】(58):数据的本地化存储

在做村规工具的过程中&#xff0c;需要设置一些参数&#xff0c;比如说导图的DPI&#xff0c;需要导出的图名等等。 每次导图前都需要设置参数&#xff0c;虽然有默认值&#xff0c;但还是需要不时的修改。 在使用的过程中&#xff0c;可能会有一些常用的参数&#xff0c;希望…

shell 入门练习小记

一、hello world #!/bin/bash echo "Hello World !"#! 为约定的标记&#xff0c;告诉系统这个脚本需要什么解释器执行&#xff0c;后接绝对路径 /bin/bash 表示期望 bash去解析并运行shell echo用于向窗口输出文本 chmod x ./test.sh #给脚本赋执行权限 ./test.sh …

Leetcode-每日一题【剑指 Offer 10- II. 青蛙跳台阶问题】

题目 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e97&#xff08;1000000007&#xff09;&#xff0c;如计算初始结果为&#xff1a;1000000008&#xff0c;请返回 1。 示例 1&#xff1a; 输…

Linux命令200例:tr用于对输入的文本进行字符转换、删除、替换等

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

龙架构 Arch Linux 发行版发布

导读近日&#xff0c;龙架构 Arch Linux 发行版官方网站宣布结束 beta 状态&#xff0c;正式支持龙架构 (LoongArch)。 Arch Linux 是一种轻量级、可定制、灵活的 Linux 操作系统。作为一款简单、现代、开放的操作系统&#xff0c;Arch Linux 旨在基于 “KISS 原则”&#xff0…

2020年12月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题 第1题 执行语句print(1010.0)的结果为&#xff1f; A&#xff1a;10 B&#xff1a;10.0 C&#xff1a;True D&#xff1a;False 正确的答案是 C&#xff1a;True。 解析&#xff1a;在Python中&#xff0c;比较运算符 “” 用于比较两个值是否相等。在这个特…

解释器模式(Interpreter)

解释器模式是一种行为设计模式&#xff0c;可以解释语言的语法或表达式。给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;然后定义一个解释器&#xff0c;使用该文法来解释语言中的句子。解释器模式提供了评估语言的语法或表达式的方式。 Interpreter is a behav…