4、Spring_IOC注解开发

IOC 注解开发

  • 版本了解
    • 2.0版本时开始支持注解开发(2.0之前就是昨天学习的纯 xml 操作)
    • 2.5版本才完善
    • 3.0版本支持纯注解开发

1.注解&xml配置Bean

1.1配置用户mapper

  • 配置 mapper

    public interface UserMapper {void save();
    }
    
  • 配置 mapper 实现类(还没有交给 spring 管理)

    public class UserMapperImpl implements UserMapper {public void save() {System.out.println("保存用户成功");}
    }
    

1.2将mapper交给spring管理

  • 使用 @Component 注解

  • 配置 mapper 实现类

    @Component
    public class UserMapperImpl implements UserMapper {public void save() {System.out.println("保存用户成功");}
    }
    
  • 配置 xml 包扫描路径

    <context:component-scan base-package="cn.sycoder.xmlAnnotationBean.mapper"/>
    
    <?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"><context:component-scan base-package="cn.sycoder.xmlAnnotationBean.mapper"/>
    </beans>
    

1.3通过容器获取bean

  • 获取 applicationContext

     ApplicationContext context = new ClassPathXmlApplicationContext("xmlAndAnnotation.xml");
    
  • 获取bean

    @Test
    public void testComponent(){ApplicationContext context = new ClassPathXmlApplicationContext("xmlAndAnnotation.xml");final UserMapper bean = context.getBean(UserMapper.class);bean.save();
    }
    

1.4Component详解

  • 默认不传参,bean 的名称是首字母小写其余不变

    正规命名的时候:UserMapperImpl --- userMapperImpl
    不正规命名时候:UUserMapperImpl--- UUserMapperImpl
    
  • 给bean 指定名称

    @Component("u") 参数就是你bean的名称
    
  • 使用位置:具体类的上方,不要使用到接口上

  • 作用:将bean 交给spring管理

  • 延伸的注解,注意,和Component一模一样的,只不过是用于给程序员区分业务组件的

    • Controller

      • 用于控制层

        @Controller
        public class UserController {//写接口
        }
        
    • Service

      • 用于业务层

        @Service
        public class UserServiceImpl implements IUserService {public void save() {}
        }
        
    • Repository

      • 用于持久层

        @Repository
        public class UserMapperImpl implements UserMapper {public void save() {System.out.println("保存用户成功");}
        }
        

      [外链图片转存中...(img-HJfzAbPB-1692668223585)]

2.纯注解配置Bean

2.1配置学生Mapper

  • mapper 接口

    public interface StudentMapper {void save();
    }
    
  • mapper 接口实现类

    @Repository
    public class StudentMapperImpl implements StudentMapper {public void save() {System.out.println("保存学生成功");}
    }
    

2.2添加配置类

2.2.1@Configuration详解

  • 使用 @Configuration

    @Configuration
    public class SpringConfig {
    }
    
    • 将 SpringConfig 类变成spring 的配置类,替换 xml 配置文件
  • 作用:标识该类是spring的配置类

  • 配置名称,默认首字母小写

  • 使用在类上

2.2.2@ComponentScan详解

  • 配置包扫描 @ComponentScan

    @Configuration
    @ComponentScan("cn.sycoder.annotationBean.mapper")
    public class SpringConfig {
    }
    
  • 作用:配置包扫描路径,当前包及其子包都会扫描

  • value:指定包的路径,用于扫描并且注册bean

2.3获取bean

  • 获取 applicationContext

    ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
    
  • 获取 bean

    @Testpublic void testAnnotation(){ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);System.out.println(context);final StudentMapper bean = context.getBean(StudentMapper.class);System.out.println(bean);}
    

3.注解开发与xml 的梳理

  • 使用@Component 替代 xml 的过程梳理
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CJaxCWAx-1692669355261)(picture/image-20221028144719953.png)]

  • 使用 @Configuration @ComponentScan 与 xml 配置过程的梳理

    在这里插入图片描述

4.bean scops

  • 配置类

    @Configuration
    @ComponentScan({"cn.sycoder.scopes"})
    public class ScopesConfig {
    }
    
  • 配置 bean

    @Component
    public class ScopeBean {
    }
    
  • 获取 bean 执行发现bean 单例的

    @Testpublic void testScope(){ApplicationContext context = new AnnotationConfigApplicationContext(ScopesConfig.class);final ScopeBean bean = context.getBean(ScopeBean.class);final ScopeBean bean1 = context.getBean(ScopeBean.class);System.out.println(bean);System.out.println(bean1);}
    

4.1通过注解修改 scope

  • @Scope

    @Component
    @Scope("prototype")
    public class ScopeBean {
    }
    

4.2@Scope 详解

  • 位置:定义到类上方
  • 作用:修改对象创建的作用域
  • 属性:默认是singleton(单例的),可以修改成 prototype(原型)

5.bean 生命周期常用注解

  • 建立 bean 与使用

    @Component
    public class LifeBean {public LifeBean(){System.out.println("构造器执行了");}@PostConstructpublic void init(){System.out.println("初始化bean");}@PreDestroypublic void destroy(){System.out.println("销毁bean");}
    }
    

5.1@PostConstruct详解

  • 位置:方法上
  • 作用:设置该方法为初始化方法

5.2@PreDestroy

  • 位置:方法上
  • 作用:设置该方法为销毁方法

5.3注解与 xml 的梳理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9dzfpO3Y-1692670663301)(picture/image-20221028151810265.png)]

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

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

相关文章

1.文章复现《热电联产系统在区域综合能源系统中的定容选址研究》(附matlab程序)

0.代码链接 文章复现《热电联产系统在区域综合能源系统中的定容选址研究》&#xff08;matlab程序&#xff09;-Matlab文档类资源-CSDN文库 1.简述 本文采用遗传算法的方式进行了下述文章的复现并采用电-热节点的方式进行了潮流计算以降低电网的网络损耗 分析了电网的基本数…

如何更高效的写出更健全的代码,一篇文章教会你如何拥有一个良好的代码风格

前言&#xff1a;在平常的写代码的过程中&#xff0c;或多或少的遇到很多奇怪的 bug &#xff0c;尤其是一些大的程序&#xff0c;明明上一部分都是好好的&#xff0c;写下一块的时候突然多几百个 bug 的情况&#xff0c;然后这一块写完了后编译的时候直接傻眼了&#xff0c;看…

8、Vue 核心技术与实战 智慧商城项目 DAY8~10

1、 项目演示 2、 项目收获 3、 创建项目 4、调整初始化目录 1、删掉&#xff08;1&#xff09;assets中的文件&#xff08;2&#xff09;components中的文件&#xff08;3&#xff09;views中的文件2、(1)修改路由配置&#xff0c;默认的路由是个空数组即可&#xff0c;把路由…

SqlServer2019—解决SQL Server 无法连接127.0.0.1的问题

1、打开SQL Server 2019配置管理器 2、SQL Servere 网络配置(启用 Named Pipes 和 TCP/IP) 3、修改TCP/IP协议(右键选择属性—IP地址)&#xff0c;具体如下图所示&#xff1a; 4、重启SQL Server服务

【瑞吉外卖】所遇问题及解决方法

太菜了实习之余瑞吉外卖补充一下基础知识&#xff08;&#xff0c;不然真啥也不会了。 请输入正确的手机号&#xff01; 是因为我测试了我的手机号&#xff0c;爆红&#xff0c;以为方法有错。但其实是前端代码检查手机号是否符合规范的语句有点&#xff08;&#xff09;啊啊…

PyTorch训练简单的生成对抗网络GAN

文章目录 原理代码结果参考 原理 同时训练两个网络&#xff1a;辨别器Discriminator 和 生成器Generator Generator是 造假者&#xff0c;用来生成假数据。 Discriminator 是警察&#xff0c;尽可能的分辨出来哪些是造假的&#xff0c;哪些是真实的数据。 目的&#xff1a;使…

[LeetCode周赛复盘] 第 111 场双周赛20230819

[LeetCode周赛复盘] 第 111 场双周赛20230819 一、本周周赛总结2824. 统计和小于目标的下标对数目1. 题目描述2. 思路分析3. 代码实现 2825. 循环增长使字符串子序列等于另一个字符串1. 题目描述2. 思路分析3. 代码实现 2826. 将三个组排序1. 题目描述2. 思路分析3. 代码实现 …

js、PHP连接外卖小票机打印机方案(调用佳博、芯烨等)

前言&#xff1a; 目前开发需要用到电脑直接连接外卖小票机打印小票&#xff0c;查阅各种资料&#xff0c;使用 6612345浏览器 终于解决了这个问题。 效果&#xff1a; PHP、js直接连接小票机并且自动出票。 支持的小票机&#xff1a; 目前测试可以的有&#xff1a;电脑A4打印…

SQL注入读写文件

文章目录 条件利用SQL注入漏洞读取hosts文件查看文件读写权限安全选项允许导入导出读取hosts文件 利用SQL注入漏洞写入一句话木马&#xff0c;并用蚁剑连接webshell写入文件 条件 SQL注入有直接SQL注入&#xff0c;也有文件读写时的注入&#xff0c;后者的主要 目的在于获取web…

回归预测 | MATLAB实现PSO-RF粒子群优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现PSO-RF粒子群优化算法优化随机森林算法多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现PSO-RF粒子群优化算法优化随机森林算法多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果…

嵌入式Linux开发实操(十一):ETH网络接口开发

# 前言 嵌入式linux也有些是支持网口的,比如RGMII,嵌入式系统资源支持以太网和其他基本接口的硬件平台(板上或片上系统),有充足的NOR或NAND Flash闪存,用于容纳OS、lib库、fileSystem文件系统、APP应用程序、Bootloader引导程序等。嵌入式Linux是开源的、可修改的,并且…

个人微信AI聊天机器人

个人微信AI聊天机器人 微信AI机器人介绍产品介绍联系本人微信&#xff1a;yao_you_meng_xiang代码地址&#xff1a;https://github.com/xshxsh/weChatAiRobot 前期准备个人微信号Windows电脑注册AI模型账号 搭建使用注册AI账号注册讯飞账号创建应用申请API使用 安装微信 安装代…

【网络安全】防火墙知识点全面图解(三)

本系列文章包含&#xff1a; 【网络安全】防火墙知识点全面图解&#xff08;一&#xff09;【网络安全】防火墙知识点全面图解&#xff08;二&#xff09;【网络安全】防火墙知识点全面图解&#xff08;三&#xff09; 防火墙知识点全面图解&#xff08;三&#xff09; 39、什…

解决idea登录github copilot报错问题

试了好多方案都没用&#xff0c;但是这个有用&#xff0c; 打开idea-help-edit custonm vm options 然后在这个文件里面输入 -Dcopilot.agent.disabledtrue再打开 https://github.com/settings/copilot 把这个设置成allow&#xff0c;然后重新尝试登录copilot就行就行 解决方…

nginx代理请求到内网不同服务器

需求&#xff1a;之前用的是frp做的内网穿透&#xff0c;但是每次电脑断电重启&#xff0c;路由或者端口会冲突&#xff0c;现在使用汉土云盒替换frp。 需要把公网ip映射到任意一台内网服务器上&#xff0c;然后在这台内网服务器上用Nginx做代理即可访问内网其它服务器&#xf…

mysql使用flashback恢复数据

常在河边走&#xff0c;哪有不湿鞋。如果我们经常操作数据库&#xff0c;很有可能就会造成误操作&#xff0c;假如我们不幸误删了数据&#xff0c;有没有办法快速恢复呢&#xff1f; 这里&#xff0c;我们就以用的最多的mysql举例&#xff0c;聊聊如何快速恢复数据。mysql官方貌…

springboot里 运用 easyexcel 导出

引入pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency>运用 import com.alibaba.excel.EasyExcel; import org.springframework.stereotype.Contr…

YOLOv7-tracker 目标追踪 输入视频帧

参考项目&#xff1a;https://github.com/JackWoo0831/Yolov7-tracker/tree/master github链接&#xff1a;https://github.com/Whiffe/Yolov7-tracker 码云链接&#xff1a;https://gitee.com/YFwinston/Yolov7-tracker 1 项目安装 1.1 环境搭建 平台&#xff1a;AutoDL 选…

Linux TCP协议——三次握手,四次挥手

一、TCP协议介绍 TCP协议是可靠的、面向连接的、基于字节流的传输层通信协议。 TCP的头部结构&#xff1a; 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;&#xff08;tcp是传输层的协议&#xff0c;端与端之间的数据传输&#xff0c;在TCP和UDP协议当中不会体现出I…

【Linux】一张图了解系统文件

首先先认识磁盘结构 系统文件分布图 文件查找 文件删除 文件的增删改查都是围绕inode来完成的&#xff0c;所以当我们要进行文件删除的时候&#xff0c;只需要通过inode来获取到它对应的block bitmap和inode bitmap数据块容器和保存文件属性的位置置为 0即可 &#xff0c;如果想…