4、Spring_IOC注解开发

news2024/11/24 4:37:18

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

    @Test
        public 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 单例的

    @Test
        public 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("构造器执行了");
        }
        @PostConstruct
        public void init(){
            System.out.println("初始化bean");
        }
        @PreDestroy
        public void destroy(){
            System.out.println("销毁bean");
        }
    }
    

5.1@PostConstruct详解

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

5.2@PreDestroy

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

5.3注解与 xml 的梳理

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

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

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

相关文章

第 6 章 递归(2)(迷宫问题)

6.6.1 迷宫问题 6.6.2 代码实现 package pers.th.d6_recursion;/*** 递归-迷宫问题*/ public class MiGong {public static void main(String[] args) {//先创建一个二维数组&#xff0c;模拟迷宫//地图int[][] map new int[8][7];//使用1 表示墙//上下全部置为1for (int i …

MySQL数据库:内置函数

日期函数 规定&#xff1a;日期&#xff1a;年月日 时间&#xff1a;时分秒 函数名称作用描述current_date()当前日期current_time()当前时间current_timestamp()当前时间戳date(datetime)返回datetime参数的日期部分date_add(date,interval d_value_type)在date中添加…

畜牧兽医虚拟仿真|病禽解剖VR模拟操作演练系统

在生物学课程中&#xff0c;动物解剖是一个重要的组成部分&#xff0c;它能够帮助学生了解动物的生理结构、功能和生活习性&#xff0c;从而更好地认识和保护自然界的生物多样性。然而&#xff0c;传统的动物解剖教学方法往往局限于课堂教学和实验室实践&#xff0c;学生很难真…

基于MATLAB开发AUTOSAR软件应用层Code mapping专题-part 4 Data store标签页介绍

这篇文章我们继续讲解code-mapping的Data stores页,这个页的内容对应的SIMULINK中的模块是Data store memory。 我们首先在模型中创建一个Data store memory模块,如图: Data store memory模块的作用相当于一个全局变量,我们可以在模型的功能逻辑里将一个信号存进去,在另…

【计算机网络篇】TCP协议

✅作者简介&#xff1a;大家好&#xff0c;我是小杨 &#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; TCP协议 1&#xff0c;TCP 简介 TCP&#xff08;Transmission Control Protocol&#xff09;是…

Linux系统使用service设置程序自启动

Linux系统使用service设置程序自启动 整体描述前期准备1. 生成pid文件 具体方法1. 脚本编写1.1 start.sh脚本1.2 shutdown.sh脚本1.3 restart.sh脚本 2. 设置service2.1 service文件2.2 设置自启动2.3 查看设置结果 整体描述 在linux系统里&#xff0c;设置程序自启动是基本操…

基于Vue3.0的优秀低代码项目

在众多开发技术中&#xff0c;Vue组件化开发技术以其卓越的灵活性和高效性备受瞩目。借助Vue3.0的强大功能和简洁易用的语法&#xff0c;你将能够轻松打造出最令人瞩目的低代码项目。 低代码开发正成为当前企业提升运营效率、降低开发成本的首选方案。相较于传统开发模式&#…

基于Singularity 安装 AmpliconSuite-pipeline

基于Singularity 安装 AmpliconSuite-pipeline 按照AmpliconSuite-pipeline官网的Singularity安装方法遇到不少问题&#xff0c;好在都一一解决了&#xff0c;写个文档记录一下我基于Singularity 安装 AmpliconSuite-pipeline的过程。 step1 获取 Singularity镜像 镜像地址&…

如何截掉图片中的一部分?

如何截掉图片中的一部分&#xff1f;在社交媒体的热潮下&#xff0c;我们常常需要将自己生活中的照片或者美景图片分享到互联网或者自己的朋友圈中。然而&#xff0c;有时候我们会发现照片中存在一些不需要的元素&#xff0c;这可能会降低照片的美观程度。针对这种情况&#xf…

分布式核心知识以及常见微服务框架

分布式中的远程调用 在微服务架构中&#xff0c;通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分&#xff1a;序列化和通信协议。常见的序列化协议包括json、xml、 hession、 protobuf、thrift、text、 bytes等&#xff0c;目前主流的远程调用技术有基于HTTP…

C语言刷题训练DAY.10

1.空心正方形图案 解题思路&#xff1a; 这里我们只把四条边的内容打印成*&#xff0c;其他内容打印成空格即可。 解题代码&#xff1a; #include <stdio.h> int main() {int n 0;while (scanf("%d", &n) ! EOF){int i 0;for (i 0; i < n; i) //外…

Stream流报错Duplicate key

目录 1、场景2、问题3、解决办法4、完整代码 1、场景 有一个客户列表&#xff0c;每个item里有客户id、name、客户开的公司。 现在根据客户id分组&#xff0c;以客户id为key&#xff0c;把id相同的放到value里&#xff0c;构建一个Map。 这样可以快速根据id&#xff0c;获取相…

LLM赋能产业数智化业务系统升级的思考

1概述 2022年是人工智能的一个分水岭&#xff0c;ChatGPT&#xff0c;DALL E[ DALL E&#xff1a;是一款可以根据文本描述创建图像的AI工具。]和Lensa[ Lensa&#xff1a;是一款AI美图软件。]等几个面向消费者的应用程序发布了&#xff0c;它们的共同主题是使用生成式人工智能&…

【日常积累】Cookie和Session的区别

背景 会话&#xff08;Session&#xff09;跟踪是Web程序中常用的技术&#xff0c;用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份&#xff0c;Session通过在服务器端记录信息确定用户身份。 本章将分享一些关于Cooki…

【高危】MarkText<=0.17.1 存在DOM型XSS漏洞 (CVE-2023-2318)

漏洞描述 MarkText 是热门的开源Markdown编辑器&#xff0c;覆盖Windows/Linux/MacOS平台。 MarkText 0.17.1及之前版本中的 pasteCtrl 类未对用户可控的 HTML 内容进行过滤&#xff0c;当用户将攻击者可控的 HTML 代码粘贴至 MarkText 编辑器中时&#xff0c;攻击者可利用DO…

鸿蒙应用开发之基础组件

一、组件简介 组件&#xff08;Component&#xff09;是界面搭建与显示的最小单位&#xff0c;HarmonyOS ArkUI声明式开发范式为开发者提供了丰富多样的UI组件&#xff0c;我们可以使用这些组件轻松的编写出更加丰富、漂亮的界面。 组件根据功能可以分为以下五大类&#xff1…

Leetcode---359周赛

题目列表 2828. 判别首字母缩略词 2829. k-avoiding 数组的最小总和 2830. 销售利润最大化 2831. 找出最长等值子数组 一、判断首字母缩略词 纯模拟&#xff0c;代码如下 class Solution { public:bool isAcronym(vector<string>& words, string s) {string tmp…

如何将pdf文件转换成word文档?

如何将pdf文件转换成word文档&#xff1f;PDF文档是我们日常办公中最为常用的电子文档格式的文件&#xff0c;也是在会议、教育培训以及商业营销中经常使用的文档格式。所以说PDF文档的功能较强&#xff0c;且应用场景较多。但是也有例外的时候&#xff0c;比如我们需要将PDF文…

vue项目中使用ts的枚举类型

vue项目中要使用ts的枚举类型需要为script标签的lang属性添加ts属性值 <script lang"ts" setup> </script > 声明枚举类型&#xff1a; //语法 /* enum 枚举名称 {可能的值 }*/ enum scenic_status {"正常" 1,"审核中","暂停…

Prometheus 监控系统---你值得拥有

目录 一&#xff1a;Prometheus 1、Prometheus 概述 2、应用场景 3、Prometheus 的特点 4、Prometheus 的生态组件 &#xff08;1&#xff09;Prometheus server&#xff1a;服务核心组件 &#xff08;2&#xff09;Client Library: 客户端库 &#xff08;3&#xff0…