SPRING-了解3-注解

news2024/11/15 20:30:12

IOC容器操作Bean

注解格式:@注解名称(属性名称=属性值,属性名称=属性值)   放在类,方法,属性都可以

    目的:简化XML配置

对象创建四大注解

1)用的位置不是强制的

@Component  最普通

@Service  用在service层

@Controller 用在controller

@Repostory 用在持久层 如dto

以上四个功能一样,都可以用来创建Bean实例

2)lib文件夹中额外引入依赖aop

    

引入到项目里

3)开启组件扫描,目的是告诉spring,哪些文件有注解

再次在xml中引入context,增加一行xmlns,增加两个http,把其中三处beans修改为context

<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 http://www.springframework.org/schema/context/spring-context.xsd
      ">

指定扫描范围

<!--   开启组件扫描多个包之间可以用,隔开,或者扫描上层-->
<!--    <context:component-scan base-package="com.i7i8i9.spring5.dao,com.i7i8i9.spring5.service"></context:component-scan>-->
    <context:component-scan base-package="com.i7i8i9"></context:component-scan>

   正式写类

//括号内容可以不写,不写默认将类首字符小写
@Component(value = "userService")  //等效于在XML中配置<bean id=userService  class=
public class UserService {
    public void add(){

       总结:new ClassPathXmlApplicationContext("bean1.xml") 首先找到XML,然后根据里面的注解指引,找到注解 

【补充】扫描进一步设置扫描范围

<!--  例1  use-default-filters="false" 不加会使用默认filter,如果为false,表示不使用默认的filter  -->
    <context:component-scan base-package="com.i7i8i9" use-default-filters="false">
        <!--  include-filter设置包含那些来扫描  type="annotation" expression=Controller 表示只扫描带注解@Controller的类-->
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

        
    </context:component-scan>
<!--    例2  扫描所有类-->
    <context:component-scan base-package="com.i7i8i9">
        <!-- 设置注解是@Controller不扫描   -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

基于注解实现属性注入

对象级别三个

@AutoWired 根据类型注入 等同XMLBy Type 举例 service 和dao

     第一步:两个对象创建,在dao和service

dao文件下有接口,注解不能加接口上,只能加在实现类上

@Repository
public interface UserDao {
    public  void add();
}


@Service
public class UserService {
    public void add(){
        System.out.println("hello啊");


    }

第二步:因为service要用到dao,所以要注入dao

      定义要引入的对象的属性,在其上加@AutoWired

@Service
public class UserService {
    @Autowired
    private UserDao userDao; //定义要引入的对象的属性,在其上加@AutoWired,不需要像XML那样定义set方法
    public void add(){
       userDao.add();
    }
}

[报错]Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.i7i8i9.spring5.dao.UserDao' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

原因:在接口上不能放注解,要放在实现类上

@Qualifier根据对象名称进行注入 

   要配合上面的@AutoWired一起使用

   主要解决如下UserDao有多个实现类,类型都是UserDao,别人要使用时就不知道用哪个,所以增加名称

@Repository(value = "userDaoImpl1")
public class UserDaoImpl implements UserDao{
    @Override
    public void add() {
        System.out.println("dao add");
    }
}

这样注入时在@Qualifier进一步指定名称

   

@Service
public class UserService {
    @Autowired
    @Qualifier(value = "userDaoImpl1")
    private UserDao userDao; //定义要引入的对象的属性,在其上加@AutoWired,不需要像XML那样定义set方法
    public void add(){
       userDao.add();
    }
}

@Resoure 可以根据类型或名称注入

它是 java扩展包 Javax中的,所以Spring官方不建议使用

引入 

https://github.com/RationalityFrontline/javax.annotation-api

 可以根据类型或名称将需要的对象注入

@Service
public class UserService {
//    @Autowired
//    @Qualifier(value = "userDaoImpl1")
//    private UserDao userDao; //定义要引入的对象的属性,在其上加@AutoWired,不需要像XML那样定义set方法


     //@Resource  //这是根据类型
     @Resource(name = "userDaoImpl1") //这是根据名称
    private UserDao userDao;
    public void add(){
       userDao.add();
    }
}

 

@Value 注入普通类型属性

@Value(value="hhihi")
private String name;

完全注解开发

1)创建任意名称配置类,代替XML配置文件

在其上增加@Configuration //把当前类变成Spring配置类,代替XML

另外因为现在bean1.xml中只有1行,扫描范围,改为以下@ComponentScan(basePackages = {"com.i7i8i9"})

package com.i7i8i9.spring5.config;

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

@Configuration   //把当前类变成Spring配置类,代替XML
@ComponentScan(basePackages = {"com.i7i8i9"})
public class SpringConfig {
}

 2)修改测试方法

因为删掉了bean1.xml,所以需要更换context获取方法

     

    //全注解开发
    @Test
    public void testUser1(){
        //更换源头
        ApplicationContext context=new AnnotationConfigApplicationContext("SpringConfig.class");
        UserService userService=context.getBean("userService", UserService.class);
        userService.add();

    }
}

报错  org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'userService' available

原因:SpringConfig.class不能带双引号

ApplicationContext context=new AnnotationConfigApplicationContext(SpringConfig.class);

修正

  //全注解开发
    @Test
    public void testUser1(){
        //更换源头
        ApplicationContext context=new AnnotationConfigApplicationContext(SpringConfig.class);
        UserService userService=context.getBean("userService", UserService.class);
        userService.add();

    }

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

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

相关文章

接口测试(十)—— telnet和python代码测试dubbo接口

目录 一、传智健康项目介绍 1、项目描述 2、目标用户群体 3、项目模块 4、系统框架 二、Dubbo接口测试 1、RPC 2、Dubbo 3、查阅API文档 三、Telnet工具远程调用 1、启用telnet 2、telnet远程连接服务 3、telnet调用服务接口 四、python借助dubbo远程调用 1、安…

MySQL~JDBC

10、JDBC&#xff08;重点&#xff09; 10.1、数据库驱动 驱动&#xff1a;声卡、显卡、数据库 我们的程序会通过 数据库 驱动&#xff0c;和数据库打交道&#xff01; 10.2、JDBC SUN公司为了简化 开发人员的&#xff08;对数据库的统一&#xff09;操作&#xff0c;提供了…

剑指offer常见题 - 链表问题(一)

二叉树相关算法 链表相关知识点&#xff1a; 链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 知识点一&#xff1a;链表由一系列结点&#xff08;链表中每一个元素称为结点&#xff09;组成&#xff0c;…

IDEA中如何使用Vim?看完本教程,让你用IDEA用到爽~(建议收藏)

目录 前言 Vim有什么特点&#xff1f; 为什么我要安利你在 IEAD 中使用Vim? Vim 一、环境配置 二、Vim的使用 2.1、方向键 hjkl 2.2、​编辑复制&粘贴 2.3、选择代码块并删除 2.4、块级删除 2.5、各种插入模式 2.5.1、以下是gif演示 2.6、jump&#xff08;解放鼠…

毕业设计 stm32智能电子秤系统 - 物联网 嵌入式 单片机

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理4.1 STM32F103C8T64.2 HX711压力传感器5 部分核心代码6 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&…

【OpenCV】Ubuntu配置OpenCV环境

1.从官网下载opencv包拷贝到虚拟机Ubuntu中&#xff0c; 虚拟机与主机传输文件可以采用 vmware tool、共享文件夹或者远程连接工具 2.解压得到对应版本号文件夹&#xff0c;我的是opencv-3.4.2 3.修改文件权限chmod -R 777 opencv-3.4.2 从win10进入Ubuntu中的文件压缩包解…

2022年云南省—信息安全管理与评估赛项竞赛规程

2022年云南省职业院校技能大赛 信息安全管理与评估赛项竞赛规程 一、赛项名称 赛项编号&#xff1a;No.11 赛项名称&#xff1a;信息安全管理与评估 英语翻译&#xff1a;Information Security Management and Evaluation 赛项组别&#xff1a;高职组 赛项归属产业&a…

本周大新闻|John Carmack从Meta离职,OPPO发布双目AR一体机仅38g

本周大新闻&#xff0c;AR方面&#xff0c;微软已向客户承诺新款HoloLens&#xff1b;NASA成立Joint AR项目&#xff0c;计划在宇航服头盔中加入AR功能&#xff1b;OPPO Air Glass 2发布&#xff0c;双目光波导仅38g&#xff1b;Rokid开设全球首家品牌旗舰店&#xff1b;谷歌为…

【数据结构】二叉树的节点总个数、叶子节点个数、第K层节点个数、二叉树的深度

目录 1.结点总个数 1.1 局部静态变量法 思维 代码 不足之处 2.传指针法 程序代码 3.递归法 思想 程序代码 详细过程 2.叶子节点个数 思想 程序代码 3.第K层节点个数 思想 程序代码 4.二叉树深度 思想 程序代码 求二叉树节点总个数、叶子节点个数、第k层节点…

汀丶的创作纪念日

机缘 csdn的博龄5年了&#xff0c;但实际创作时间只有两年&#xff1b;第一次接触csdn主要是用来查找代码bug并收藏一些有价值博客&#xff0c;但渐渐地自己也就习惯把自己学到的知识和技术分享出来&#xff0c;一起共建。 主要是关于机器学习、强化学习、数据挖掘、强化学习以…

ADI Blackfin DSP处理器-BF533的开发详解62:DSP控制ADXL345三轴加速度传感器-贪食蛇游戏(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 MEMS三轴加速度传感器 我做了一个三轴加速度传感器的子卡&#xff0c;插在这个板子上&#xff0c;然后写了一些有意思的应用程序。 代码实现功能…

Bootstrap5 侧边栏导航(Offcanvas)

Bootstrap5 侧边栏侧边栏类似于模态框&#xff0c;在移动端设备中比较常用。 创建滑动导航 我们可以通过 JavaScript 来设置是否在 .offcanvas 类后面添加 .show 类&#xff0c;从而控制侧边栏的显示与隐藏&#xff1a; .offcanvas 隐藏内容 (默认).offcanvas.show 显示内容…

JVM之native关键字与PC寄存器

native关键字&#xff1a; native关键字主要用于修饰方法&#xff1a; 被native关键字修饰的方法叫做本地方法&#xff0c;一个native方法就是一个Java调用非Java代码的接口&#xff0c;该方法的实现由非Java语言实现&#xff0c;而是使用C或C等其他编程语言实现 native方法…

Compose 和 Android 传统View 互相调用

1. 前言 Compose 具有超强的兼容性&#xff0c;兼容现有的所有代码&#xff0c;Compose 能够与现有 View 体系并存&#xff0c;可实现渐进式替换。这就很有意义了&#xff0c;我们可以在现有项目中一小块一小块逐步地替换Compose&#xff0c;或者在旧项目中实现新的需求的时候…

设计模式之外观模式

Facade design pattern 外观模式的概念、外观模式的结构、外观模式的优缺点、外观模式的使用场景、外观模式的实现示例、外观模式的源码分析 1、外观模式的概念 外观模式&#xff0c;为多个复杂的子系统提供一个统一的接口&#xff0c;使得这些子系统更加容易被访问。在现有的…

【AI with ML】第 11 章 :对序列模型使用卷积和递归方法

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

SAP Gateway Foundation 里的 batch 操作

SAP Gateway Foundation (SAP_GWFND) 是一个在 SAP NetWeaver 中可用的软件组件。 SAP Gateway Foundation 提供开发和生成工具来为各种客户端开发工具创建 OData 服务。 简而言之&#xff0c;它在应用程序或 SAP Business Suite 数据与目标客户、平台和编程框架之间建立连接。…

核心面试题:MVCC、间隙锁、Undo Log链、表级锁、行级锁、页级锁、共享锁、排它锁、记录锁等等

文章很长&#xff0c;而且持续更新&#xff0c;建议收藏起来&#xff0c;慢慢读&#xff01;疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 &#xff1a; 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

网页初学者,如何使用VS2005搭建编程环境(JavaScript及ASP调试)

一直想学一下网页编程&#xff0c;但是感觉要学的东西太多了。也没有人指导。只好一个人摸索。 尝试了一些常用的网页编程技术。得出自己的总结&#xff0c;写在这里做一个备份。 本文写个自己&#xff0c;也作为和我一样的初学者一个参考。 【工具准备】 一、服务器端学什…

大数据的基础知识上(大数据的概念和生态、linux系统与命令、虚拟机导入、虚拟机额配置和联网)

目录一、数据分析的方向二、数据分析步骤1.明确分析目的和思路2.数据传输收集过程3.数据处理4.数据分析5.数据展现6.报告撰写三、数据是什么 大数据时代大数据的应用有哪些四、分布式和集群1.概念&#x1f3a1;&#xff08;by the way&#xff09;大数据生态系统&#x1f3a1;&…