【狂神】Spring5笔记(10-19)

news2025/1/16 18:59:49

 又是美好而努力的一天呀~

                             __ 
                              /|
    *  *  *         *  *  * /   
 *          *     *       /  *  
*             * *       /     * 
*              *              * 
*                             * 
*    happy valentine's day    * 
 *                           *  
  *                         *   
    *                     *     
      *                 *       
        * /           *         
        /  *       *            
    __/      *   *              
     /|        *                

目录

1.C命名和P命名空间注入

2.bean作用域

3.自动装配Bean

3.1、byName

3.2、byType

3.注解装配

autowired

Resoures

4.Spring注解开发

4.1、bean

4.2、属性如何注入

4.3、衍生的注解

4.4、自动装配

4.5、作用域

4.6、小结

5.使用JavaConfig实现配置

6.ERROR

7.代理模式

7.1、静态代理模式

案例1:增删查改,且附加了一个增加日志的功能

代码如下:

7.2、动态代理模式

案例1:

7.2.3、Error


ALT+Insert可以重新toString()方法

后面就是测试类里面可以不用进行强转,而是通过在其后面加入类名.class

context.getBean("User",User.class)

1.C命名和P命名空间注入

  • P命名注入
  • C命名注入

在官网里面

2.bean作用域

这里的话,单例 模式适用于在单线程的情况下,而单例模式适用于多线程

3.自动装配Bean

3.1、byName

会自动在容器上下文中查找,和自己对象set方法后面的值对应的bean id

3.2、byType

会自动在容器上下文中查找,和自己对象属性类型相同的bean

3.注解装配

配置:

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

aop和注解的配置 注意看是有很多相似的地方的。

  • autowired

  • Resoures

4.Spring注解开发

总结:这一部分的笔记截取的比较多,所以看起来会有点‘乱’,但是大致的知识点也就是这样了。

首先就是在beans中导入注解相关的依赖,然后知道@Component以及其衍生注解,@Value,有自动装配功能的@Autowired,@Nullable,@Resource注解的功能。接着就是其作用域,单例模式,原型模式,用@Scope最后就是要知道xml和注解的区别。

在spring4之后,要使用注解开发,必须保证aop的导入了使用注解需要导入context约束,增加注解的支持!

4.1、bean

首先就是配置 aop和context的导入非常相似

4.2、属性如何注入

Component注解,表示组件的意思,

4.3、衍生的注解

4.4、自动装配

4.5、作用域

4.6、小结

5.使用JavaConfig实现配置

这里就是完全使用注解了,小案例如下:

代码:

//1.ZhangConfig类
package org.example.Config;

import org.example.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("org.example.pojo")
public class ZhangConfig {
    @Bean
    public User getUser(){
        return new User();
    }
}

//2.User类
package org.example.pojo;

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

@Component
public class User {
    @Value("zhang")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

//3.测试类

import org.example.Config.ZhangConfig;
import org.example.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class test {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(ZhangConfig.class);
        User getUser = context.getBean("getUser", User.class); //这里的getUser就是User类里面的方法名
        System.out.println(getUser.getName());
    }
}

下面两张图是狂神老师的代码讲解

6.ERROR

就是我的那个Configuration没有配置好,呜呜呜,我用了一个小时才发现!

7.代理模式

7.1、静态代理模式

主要就是集中体现第三方的功能,这里其实很好理解,看代码就行。

案例1:增删查改,且附加了一个增加日志的功能

有四个类:

1、User是主程序

2、UserDao是接口,里面是四个方法:增删查改

3、UserDaolmpl实现了UserDao接口类

4.UserDaoService是静态代理类,在保证不改动原有实现类的基础上,添加其他的功能。

代码如下:

//1.User类
package com.zhang.dao;

public class User {
    public static void main(String[] args) {
        UserDaoService userDaoService=new UserDaoService();
        UserDaolmpl userDaolmpl=new UserDaolmpl();
        userDaoService.setUserDaolmpl(userDaolmpl);
        userDaoService.add();
    }
}
//2.UserDao类
package com.zhang.dao;

public interface UserDao {
    void add();
    void delete();
    void update();
    void query();
}
//3.UserDaolmpl类
package com.zhang.dao;

public class UserDaolmpl implements UserDao{
    @Override
    public void add() {
        System.out.println("添加!");
    }

    @Override
    public void delete() {
        System.out.println("删除!");

    }

    @Override
    public void update() {
        System.out.println("更改!");

    }

    @Override
    public void query() {
        System.out.println("查找!");

    }
}
//4.UserDaoService类
package com.zhang.dao;
//添加日志功能
public class UserDaoService {
    private UserDaolmpl userDaolmpl;
    public void setUserDaolmpl(UserDaolmpl userDaolmpl) {
        this.userDaolmpl = userDaolmpl;
    }
    public void add() {
        userDaolmpl.add();
        log("添加");
    }
    public void query() {
        userDaolmpl.query();
        log("查找");

    }
    public void delete() {
        userDaolmpl.delete();
        log("删除");

    }
    public void update() {
        userDaolmpl.update();
        log("更改");

    }
    //添加日志函数
    public void log(String msg){
        System.out.println("使用了"+msg+"方法");
    }

}

另外一个案例是买房案例,但是我觉得两者差不多,所以这里就不摆出来了,有需要的宝子和我说。

7.2、动态代理模式

狂神老师说了一句很有意思的一句话,永远不要在学生听不懂的地方过多停留。

言归正传,我觉得动态和静态相比,动态与其名字一样,很灵活,非常的方便。

案例1:

这个主要就是理解代码的作用:

工具类的思想

1.动态代理类

package org.example.demo02;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyInvocationHandler implements InvocationHandler {
    //1.被代理的接口
    private Object target;

    public void setTarget(Object target) {
        this.target = target;
    }
    //2.生成得到代理类
    public Object getProxy(){
        return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(),this);
    }
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        log(method.getName());  //得到当前方法的名字
        Object result=method.invoke(target,args);
        return result;
    }
    //添加一个日志方法
    public void log(String msg){
        System.out.println("使用了"+msg+"方法");
    }
}

2.测试类:

反射机制是什么呀!(没学,呜呜呜~)

7.2.3、Error

Exception in thread "main" java.lang.ClassCastException: class jdk.proxy1.$Proxy0 cannot be cast to class org.example.demo01.Poxy (jdk.proxy1.$Proxy0 is in module jdk.proxy1 of loader 'app'; org.example.demo01.Poxy is in unnamed module of loader 'app')

at org.example.demo02.Client.main(Client.java:13)

解决:

我的问题有

其一是在主程序里面引用的内容,也就是Proxy,是我上面一个包的类

其二是我没搞清楚代码的整个意思,所以就算是对照着狂神老师的代码也没瞧见错误。

更改如下:

画红线的部分要注意,getProxy()返回的是接口,而不是实体类。

批量替换快捷键ctr+r

 最后,祝大家身体健康,一天更比一天强!!!

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

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

相关文章

python基础之miniConda管理器

一、介绍 MiniConda 是一个轻量级的 Conda 版本&#xff0c;它是 Conda 的精简版&#xff0c;专注于提供基本的环境管理功能。Conda 是一个流行的开源包管理系统和环境管理器&#xff0c;用于在不同的操作系统上安装、管理和运行软件包。 与完整版的 Anaconda 相比&#xff0c…

CSS transition 过渡

1 前言 CSS过渡(transition)可以在一个元素切换到另一种状态时为其定义平滑的过渡效果。 例如&#xff0c;用户鼠标悬停在按钮上时&#xff0c;按钮颜色平滑的从一个颜色过渡到另一个颜色。 .btn:hover{background-color: red;color: black; }默认悬停效果 添加过渡效果 .b…

2.(Python数模)线性规划问题

Python解决线性规划问题 参考了以下博文 https://blog.csdn.net/m0_46692607/article/details/126784109?spm1001.2014.3001.5506 目标是解决以下的线性规划&#xff0c;程序计算出目标函数的最大值&#xff0c;并在最大值下取得的x1x2x3对应值。 源代码如下&#xff1a; …

MybatisPlus(2)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 上篇我们简单介绍了MybatisPlus的方便之处&#xff0c;这篇来深入了解Myb…

探索生成式人工智能的前景

一、什么是生成式人工智能&#xff1f; 生成式人工智能&#xff08;Generative AI&#xff09;是一类人工智能&#xff08;AI&#xff09;技术和模型&#xff0c;旨在创建新颖的内容。与简单的复制不同&#xff0c;这些模型通过利用从训练数据集中收集到的模式和见解&#xff…

飞桨花滑骨骼点动作识别比赛记 2

基于 PaddleVideo 的花滑骨骼点动作识别 2s-AGCN配置文件节点流配置文件 2s-agcn_ntucs_joint_fsd.yamlMODEL 字段DATASET 字段PIPELINE 和 INFERENCE 字段OPTIMIZER 字段 agcn2s.pygraph输入通道数 骨骼流 Dataset 和 Pipeline配置文件DATASETPIPELINE 源码skeleton.pyskeleto…

Elasticsearch 7.6 - API高阶操作篇

ES 7.6 - API高阶操作篇 分片和副本索引别名添加别名查询所有别名删除别名使用别名代替索引操作代替插入代替查询 场景实操 滚动索引索引模板创建索引模板查看模板删除模板 场景实操一把索引的生命周期数据迁移APIGEO(地理)API索引准备矩形查询圆形查询多边形查询 自定义分词器…

Spring理解,重要概念及图解,2023秋招spring常见八股文

按照自己的需求&#xff0c;找到自己不会的地方去解决 1.Spring的核心 1&#xff09;Spring的两大核心&#xff1a;IoC和AOP Spring框架包含众多模块&#xff0c;如Core、Testing、Data Access、Web Servlet等&#xff0c;其中Core是整个Spring框架的核心模块。Core模块提供…

进程的挂起状态

进程的挂起状态详解 当我们谈论操作系统和进程管理时&#xff0c;我们经常听到进程的各种状态&#xff0c;如“就绪”、“运行”和“阻塞”。但其中一个不那么常被提及&#xff0c;但同样重要的状态是“挂起”状态。本文将深入探讨挂起状态&#xff0c;以及为什么和在何时进程…

linux中安装nodejs,卸载nodejs,更新nodejs,git,linux中安装nginx并配置

文章目录 node的安装与卸载&#xff08;更新版本&#xff09;卸载nodejs安装新版本node git安装与拉取代码安装解决 linux git 每次推拉(push/pull)代码都要输入用户名密码的问题 nginx 安装、配置和卸载安装nginx配置**.conf 文件内容 nginx 卸载 注意&#xff0c;我的是Ubunt…

【Linux】root和子用户都能执行的命令,sudo无法执行(已解决)

全流程帖子 https://ask.oceanbase.com/t/topic/35604437/7 1.问题 如题&#xff0c;在编译miniob的时候遇到如下错误 [muvm-cnt8:~/code/miniob]$ sudo bash build.sh init build.sh init HEAD is now at 5df3037d Merge branch release-2.1.12-stable-pull into patches-2.…

一文搞定全进程间通讯(IPC)八大方式-管道、命名管道、信号、信号量、消息队列、共享内存+内存映射、套接字

进程间通讯&#xff08;IPC&#xff09; 参考 / 引用&#xff1a; 如何在Linux下的进行多进程编程&#xff08;初步&#xff09; - 知乎 (zhihu.com)。浅析进程间通信的几种方式&#xff08;含实例源码&#xff09; - 知乎 (zhihu.com)。 linux基础——linux进程间通信&#…

从零开始,使用C语言实现扫雷小游戏

扫雷 1. 前言2. 准备工作3. 设计思路4. 定义数组5. 初始化6. 打印7. 布置雷8. 排查雷9. 完整代码 1. 前言 大家好&#xff0c;我是努力学习游泳的鱼。今天我们会用C语言实现一个经典的windows小游戏&#xff1a;扫雷。扫雷是一款单机小游戏&#xff0c;我上中学时特喜欢在电脑…

网易24届内推

【网易】2024届网易互联网秋季校园招聘内推开始啦&#xff01;给你分享我的专属内推邀请函&#xff1a;https://bole.campus.163.com/campus/home?projectId55&type99&isShare1&boleId7b842acc7c2b42db&boleType2&signatured5f2a3dc23bed70777a8be1a14b49…

简单了解IPv4编址

目录 一、IPv4地址 二、进制转换 三、有类IPv4 四、无类IPv4 3.1 子网掩码 3.2 地址规划 3.3 VLSM可变长子网掩码 五、私有IPv4地址 六、IPv4报文格式 七、IP地址解析 一、IPv4地址 IPv4地址由“网络位主机位”构成&#xff0c;所谓的网络位就是我们通常所指的网段区…

python 列表extend方法和+(拼接)的区别

1.extend方法会直接作用于原始列表&#xff0c;会修改原始列表的值 a [10, 20, 30] b [1, 2, 3]print(a b) print(a) a.extend(b) print(a) 2.extend接收到的参数是一个可迭代的对象(iterable)&#xff0c;不管是list,tuple,str,dict,set a [10, 20, 30] b {"name&qu…

公司内部网段多管控乱,该如何规范跨网文件传输交换?

古往今来&#xff0c;高筑墙一直是有效的防御措施。从边塞长城到护城河外的高高城墙&#xff0c;都是利用隔离地域的形式实现保护安全域的效果。这样一来&#xff0c;城内的安全域可以在遇到危险时受到有效保护。 在企业网络安全防护方面&#xff0c;网络安全域隔离也是网络安全…

3D点云处理:圆柱侧面点云展开为平面 凹凸缺陷检测(附源码)

文章目录 1. 基本内容展开部分推导2. 展开流程3. 代码实现4. 应用文章目录:3D视觉个人学习目录微信:dhlddxB站: Non-Stop_目标:对采集的圆柱面点云展开为平面;应用:可用于检测圆柱侧面的凹凸缺陷;1. 基本内容 圆柱的侧面展开原理是将一个圆柱体(或柱体)的侧面展开成一个…

el-table实现纯前端导出(适用于el-table任意表格)

2023.9.1今天我学习了如何使用el-table实现前端的导出功能&#xff0c;该方法的好处有无论你的el-table长什么样子&#xff0c;导出之后就是什么样子。 1.安装三个插件 npm install file-save npm install xlsx npm install xlx-style 2.创建Export2Excel.js // 根据dom导出表…

Windows右键添加用 IDEA 打开

1.安装IDEA时 安装时会有个选项来添加&#xff0c;如下&#xff1a; 勾选即可 2.修改注册表 安装时未勾选&#xff0c;可以把下面代码中程序路径改为自己的&#xff0c;保存为对应的 idea.reg文件&#xff0c;双击即可 Windows Registry Editor Version 5.00[HKEY_CLASSES…