Spring:Annontation

news2024/12/22 15:12:17

Bean

  • 配置
    • 注解
      • @Autowired 注解
      • context:component-scan 标签

在这里插入图片描述

配置

在 Spring 中,配置 bean 实例一般使用 xml 配置方式或注解(Annontation) 方式进行配置。

注解

注解(Annontation),是在原有代码和逻辑下通过 @XXX 的方式进行 bean 配置,简化了 xml 配置文件的同时,提高了 Java Bean 的可读性与内聚性。

注解说明
@Component相当于配置文件的 bean 标签,一般使用在类上
@Service与@Component作用相同,但一般使用在 service 层
@Controller与@Component作用相同,但一般使用在 controller 层
@Repository与@Component作用相同,但一般使用在 dao 层
@Value()给属性赋值
@Resource相当于配置文件的 ref 属性,给对象赋值
@Scope相当于配置文件的 scope 属性
@PostConstruct相当于配置文件的 init-method 属性
@PreDestroy相当于配置文件的 destory-method 属性
@Autowired自动装配

简单示例:
首先,在 xml 配置文件中必须配置 context:component-scan 标签:

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

    <!-- 注:必须配置该配置项 -->
    <!-- 开启 spring 注解,base-package 属性指定扫描注解的类的所在包 -->
    <context:component-scan base-package="cn.edu.springdemo" />
</beans>

然后创建一个数学类,通过注解给其属性赋值:

package cn.edu.springdemo.annontationDemo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component(value = "mathAnnontation") // id 默认为类名,开头字母小写
public class MathAnnontation {
    @Value(value = "20230515")
    private int id;
    @Value("数学") //当只有一个值时,value 可省略
    private String math;

    public int getId() {
        return id;
    }

    public String getMath() {
        return math;
    }

    //也可以将配置放置在对应的 set 方法位置(区别:配置在属性上是使用反射赋值;配置在 set 方法上是调用 set 方法赋值)
    public void setId(int id) {
        this.id = id;
    }

    public void setMath(String math) {
        this.math = math;
    }

    @Override
    public String toString() {
        return "MathAnnontation{" +
                "id=" + id +
                ", math='" + math + '\'' +
                '}';
    }
}

再创建一个学科类,通过注解给其对象赋值:

package cn.edu.springdemo.annontationDemo;

import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class DisciplineAnnontation {
    @Resource(type = MathAnnontation.class) //或者 @Resource(name = "mathAnnontation"),默认使用 name 属性
    private MathAnnontation Discipline;

    public MathAnnontation getDiscipline() {
        return Discipline;
    }

    public void setDiscipline(MathAnnontation discipline) {
        Discipline = discipline;
    }

    @Override
    public String toString() {
        return "DisciplineAnnontation{" +
                "Discipline=" + Discipline +
                '}';
    }
}

测试结果:

package cn.edu.springdemo.test;

import cn.edu.springdemo.annontationDemo.DisciplineAnnontation;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AdminTest {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("annontationDemo.xml");
        DisciplineAnnontation discipline = (DisciplineAnnontation) applicationContext.getBean("disciplineAnnontation");
        System.out.println(discipline);
    }
}

结果如图:
在这里插入图片描述

@Autowired 注解

@Autowired,是一种注解,通过对成员变量、方法和构造函数进行标注来完成自动装配,无需再添加 Getter/Setter 与 Bean property 属性。

在上面实例的基础下,只对学科类进行修改,如图:

在这里插入图片描述

结果一样:
在这里插入图片描述

注:

  1. 当 Spring 容器没有找到对应的 bean 对象时会抛出异常,可以使用 @Autowired(required = false) 让其显示为 null ;
  2. 使用 @Resource 也可以无需添加 Getter/Setter ;
  3. @Autowired 是根据类型进行自动装配的。如果需要按名称进行装配,则需要配合 @Qualifier 使用(即 Spring 容器中有多个相同类型的 bean 时,使用 @Qualifier 注解指明使用哪个 bean );
  4. @inject 与 @Autowired 类似,但需导入相应 jar 包,不推荐使用

context:component-scan 标签

在开启 spring 注解中,必须进行配置 context:component-scan 标签。下面再讲解其标签的部分细节:

  • base-package 属性:指定 Spring 扫描注解的类的所在包,用逗号分隔多个需要扫描的包
  • resource-pattern 属性:指定 Spring 只扫描指定的包的所需类,默认扫描配置包下的所有 class 文件
  • <context:exclude-filter type=“” expression=“” /> 子标签:表示要排除的目标类
  • <context:include-filter type=“” expression=“” /> 子标签:表示要包含的目标类,需要与 use-default-filters=“false” 配合使用
<!-- 只扫描 annontationDemo 包下的所有类 -->
<context:component-scan base-package="cn.edu.springdemo" resource-pattern="annontationDemo/*.class" />

<!-- 排除扫描指定注解类,@Component 注解类失效 -->
<context:component-scan base-package="cn.edu.springdemo" >
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Component" />
</context:component-scan>

<!-- 扫描包含的指定注解类,只有 @Component 注解类生效 -->
<context:component-scan base-package="cn.edu.springdemo" use-default-filters="false" >
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Component" />
</context:component-scan>

注:
type="annotation" expression="":根据注解类型
type=“assignable” expression="":根据某个具体的类或接口以及该接口实现类

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

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

相关文章

数据库字段变更监控平台设计开发

序&#xff1a; 在开发过程中&#xff0c;在值班解决客服问题时&#xff0c;在分析定位别人写的业务代码问题时&#xff0c;重点是不是自己写的代码&#xff0c;只看到了数据库中落库最终数据&#xff0c;并不知道业务逻辑问题发生时数据库表中当时数据情况&#xff1f;如果能知…

虚拟机 NAT模式联网 重启断网的解决方法

1、虚拟机NAT模式联网 这个博客写的很清楚:按照他的方法可以ping通www.baidu.com 三分钟完成虚拟机联网 小白看了都说好&#xff01;&#xff01;&#xff01; 虚拟机超详细联网教程/步骤 SDN软件定义网络实验_虚拟机联网教程_九号迷妹的博客-CSDN博客 但是虚拟机重启几次之后…

九种分布式ID解决方案,总有一款适合你!

1、UUID 2、数据库自增ID 2.1、主键表 2.2、ID自增步长设置 3、号段模式 4、Redis INCR 5、雪花算法 6、美团(Leaf) 7、百度(Uidgenerator) 8、滴滴(TinyID) 总结比较 背景 在复杂的分布式系统中&#xff0c;往往需要对大量的数据进行唯一标识&#xff0c;比如在对…

2023牛客暑期多校训练营3

A.World Fragments I 将两个二进制数先转换成十进制数,因为只要二进制中有1,就加或减1(加减0是没有用的),所以求两个二进制的差的绝对值(这是在有1的情况下,其实只要不等于0就有1,数是非负整数) 所以需要特判,如果第一个二进制数为0,第二个二进制数不为0,那么就不能转化,输出…

甄云质量管理解决方案——插上数字“羽翼”,实现PPAP落地

导语 质量管理是供应链管理中非常重要的一环&#xff0c;通过制定和开展质量相关的活动&#xff0c;确保产品符合质量标准和一致性要求。质量管理水平的高低直接影响供应链的整体效率和最终效益&#xff0c;关乎企业形象和品牌声誉&#xff0c;已然是企业的生命线。 作为采购…

Redis超详细入门教程(基础篇)

目录 一、什么是Redis 二、安装Redis 1、Windows系统安装 2、Linux系统安装 三、Redis通用命令 四、Redis基本命令 五、五种数据结构类型 5.1、String类型 5.2、List集合类型 5.3、Set集合类型 5.4、Hash集合类型 5.5、Zset有序集合类型 六、总结 一、什么是Redi…

leecode 98验证二叉搜索树

​​​​ 这次的性能真的是超乎想象的好 题目描述 98二叉树 第一种方法 中序遍历 大体的思想就是将遍历的结果存放到数组中 检查数组是否是有序 判断是否符合条件 特点是时间和空间消耗都很大 /*** Definition for a binary tree node.* struct TreeNode {* int val;*…

常见面试题之设计模式--工厂方法模式

1. 概述 需求&#xff1a;设计一个咖啡店点餐系统。 设计一个咖啡类&#xff08;Coffee&#xff09;&#xff0c;并定义其两个子类&#xff08;美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】&#xff09;&#xff1b;再设计一个咖啡店类&#xff08;CoffeeStore&…

DAY51:动态规划(十五)买卖股票最佳时机Ⅲ+买卖股票最佳时期Ⅳ

文章目录 123.买卖股票最佳时机Ⅲ&#xff08;注意初始化&#xff09;思路DP数组含义递推公式初始化遍历顺序最开始的写法&#xff1a;初始化全部写成0debug测试&#xff1a;解答错误&#xff0c;第0天实际上是对应prices[0]和dp[0] 完整版总结 188.买卖股票最佳时机Ⅳ思路DP数…

【wxWidgets】剪贴板和拖放操作

【wxWidgets】剪贴板和拖放操作 使用剪贴板传输数据时应用程序间的一种交互方式 剪贴板和拖放操作在wxWidgets中共享了一些类来实现数据的传输 数据对象 wxDataObject类时剪贴板操作和拖放操作的核心&#xff0c;该类实例代表了拖放操作中鼠标拖拽的事物和剪贴板中拷贝和粘贴…

【git学习2】多人合作中git的使用

提交代码 中间打勾&#xff1a;commit提交代码 最后点击向上的箭头 push到远程仓库。 团队开发中git的使用 第一步先从远程仓库中某个分支拉下来代码&#xff0c;比如下图只有一个分支master 新建文件夹&#xff0c;存放这个拉下来的项目&#xff0c;克隆项目地址&#xff…

JDK8版本接口的改进(heima)

JDK8版本接口的改进&#xff08;heima&#xff09; public class InterfaceTest1 {/*JDK8版本接口改进1.允许编写带有方法体的方法&#xff08;默认方法&#xff09;2.允许编写静态方法目的&#xff1a;解决接口的升级问题---------------------------------------注意事项&…

HDFS的设计目标和重要特性

HDFS的设计目标和重要特性 设计目标HDFS重要特性主从架构分块存储机制副本机制namespace元数据管理数据块存储 设计目标 硬件故障(Hardware Failure)是常态&#xff0c;HDFS可能有成百上千的服务器组成&#xff0c;每一个组件都有可能出现故障。因此古见检测和自动快速恢复的H…

基本数据类型和引用数据类型

数据类型的分类 java中的 变量 按照数据类型来分类&#xff1a; Java语言是 强 类型语言&#xff0c;对于每一种数据都给出了明确的数据类型&#xff0c;不同的数据类型也分配了不同的内存空间&#xff0c;所以它们表示的数据大小也是不一样的。基本数据类型&#xff08;4类8种…

[Python] flask运行+wsgi切换生产环境+supervisor配置指南

文章目录 问题背景flask启动方式1&#xff08;编写main函数&#xff09;&#xff1a;方式2&#xff08;编译器&#xff09;&#xff1a;方式3&#xff08;命令行&#xff09;&#xff1a;方法4&#xff08;重命名文件法&#xff09;&#xff1a;方法5&#xff08;使用flask命令…

欧盟新规,燃油噩梦?2025年起,高速公路每60公里设立一处快充站

根据外媒The Verge报道&#xff0c;欧洲电动汽车用户将获得更多便捷的待遇&#xff0c;同时还能减少有害温室气体排放&#xff0c;这得益于欧盟理事会最新通过的法规。 根据欧盟的法规要求&#xff0c;自2025年起&#xff0c;TEN-T高速公路系统在欧洲将需要每隔60公里设立一座高…

WEB:ics-07

背景知识 php弱类型 文件上传漏洞 一句话木马 floatval函数 题目 点击项目管理 点击查看源代码&#xff0c;发泄一个view-source.php 访问该网页 进行代码审计 <?php session_start();if (!isset($_GET[page])) {show_source(__FILE__);die(); }if (isset($_GET[page]) &…

ant design vue a-table表格中插入操作按钮(以switch开关 [a-switch]为例)

1.给columns添加列属性 columns() {sortedInfo sortedInfo || {};return [{title: "工程",dataIndex: "outputProject",width: 80},{title: "是否显示小数",dataIndex: "showDecimalsOrnot",width: 80,scopedSlots: { customRender:…

页面设计—FixedContainer固定容器组件详解

一、组件介绍 可任意拖动位置&#xff0c;脱离文档流布局&#xff0c;生成绝对定位的元素 二、如何使用 1、找到FixedContainer组件&#xff0c;拖放到页面位置。 2、设置是否拖动&#xff0c;设置高级样式&#xff0c;也可以在自定义样式里编写css样式 操作步骤如下&…

IO进程线程,标准IO函数

一、什么是IO I&#xff1a;input --->输入&#xff0c;从外部存储设备将数据输入到内存中。 O&#xff1a;output --->输出&#xff0c;数据从内存到外部存储设备。 总结&#xff1a;输入输出就是数据从外存到内存&#xff0c;内存到外存的流向。 二、IO分类 1. 文件…