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

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

                             __ /|*  *  *         *  *  * /   *          *     *       /  *  
*             * *       /     * 
*              *              * 
*                             * 
*    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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://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 {@Beanpublic 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{@Overridepublic void add() {System.out.println("添加!");}@Overridepublic void delete() {System.out.println("删除!");}@Overridepublic void update() {System.out.println("更改!");}@Overridepublic 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.rhkb.cn/news/115710.html

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

相关文章

stable diffusion实践操作-提示词插件安装与使用

本文专门开一节写提示词相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 正文 1、提示词插件安装 1.1、 安装 1.2 加载【应用更改并重载前端】 1.3 界面展示 1.3.-4 使用 里面有个收藏列表&#xff0c;可以收藏以前的所有提示…

gin框架

【狂神说】Gin框架一小时上手 | 快速转型GoWeb开发 | Go语言零基础教程_哔哩哔哩_bilibili 1.介绍 2.简单程序 1&#xff09;gin.GET/POST/PUT/DELETE函数 Go Gin 简明教程 | 快速入门 | 极客兔兔 (geektutu.com) 我的理解是&#xff1a;这类函数就像是在监听接口一样&…

Docker环境搭建Prometheus实验环境

环境&#xff1a; OS&#xff1a;Centos7 Docker: 20.10.9 - Community Centos部署Docker 【Kubernetes】Centos中安装Docker和Minikube_云服务器安装docker和minikube_DivingKitten的博客-CSDN博客 一、拉取Prometheus镜像 ## 拉取镜像 docker pull prom/prometheus ## 启动p…

【MySQL系列】索引的学习及理解

「前言」文章内容大致是MySQL索引的学习。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、索引概念二、从硬件角度理解2.1 磁盘2.2 结论 三、从软件角度理解四、共识五、索引的理解5.1 一个现象和结论5.2 对Page进行建模5.3 索引可以采用的数据结构5.…

同创永益入选首批“金融数字韧性与混沌工程实践试点机构”

8月16日下午&#xff0c;由北京国家金融科技认证中心、北京国家金融标准化研究院联合主办的“传递信任 服务发展”金融科技标准认证生态大会在太原成功举办。中国金融电子化集团有限公司党委书记、董事长周逢民&#xff0c;中国科学院院士冯登国&#xff0c;中国工商银行首席技…

STM32 RTC实验

RTC时钟简介 STM32F103的实时时钟&#xff08;RTC&#xff09;是一个独立的定时器。 STM32的RTC模块拥有一组连续计数的计数器&#xff0c;在相对应的软件配置下&#xff0c;可提供时钟日历的功能。 修改计数器的值可以重新设置系统的当前时间和日期。 RTC模块和时钟配置系统…

DEAP库文档教程三-----创建类型

本节将继续展示如何通过creator创建类型以及如何使用toolbox如何对复杂问题进行初始化。 Particle的初始化--粒子初始化 一个Particle是另一个特殊类型的个体&#xff0c;这是因为通常情况下它有一个速度&#xff0c;并且有一个最优的位置需要去记忆。这种类型个体的创建与通…

Redis 7 第六讲 主从模式(replica)

🌹🌹🌹 此篇开始进入高级篇范围(❤艸`❤) 理论 即主从复制,master以写为主,Slave以读为主。当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。 使用场景 读写分离 容灾备份数据备份水平扩容主从架构 演示案例 注:masterauth、replicaof主…

JDBC连接数据库

目录 一.什么是JDBC 二.JDBC的实现步骤 三.简单使用JDBC 一.什么是JDBC JDBC是Java数据库连接&#xff0c;是java中提供数据库访问的Java API,它为关系型数据库的提供了统一访问规范。 二.JDBC的实现步骤 1.创建数据库连接 这里有两种方式: DataSource创建&#xff0c;提…

【Python从入门到进阶】34、selenium基本概念及安装流程

接上篇《33、使用bs4获取星巴克产品信息》 上一篇我们介绍了如何使用bs4来解析星巴克网站&#xff0c;获取其产品信息。本篇我们来了解selenium技术的基础。 一、什么是selenium&#xff1f; Selenium是一种用于自动化Web浏览器操作的开源工具。它提供了一组API&#xff08;应…

go锁-互斥锁

go锁-互斥锁 sema初始值是0&#xff0c;waitershift等待协程的数量 正常枷锁&#xff1a; 尝试CAS直接加锁&#xff0c;通过原子包给lockerd 为枷锁 若无法直接获取&#xff0c;进行多次自旋尝试&#xff0c;未获取到的锁的g &#xff0c;多次执行空语句&#xff0c;多次尝试…

如何为 Flutter 应用程序创建环境变量

我们为什么需要环境变量&#xff1f; 主要用于存储高级机密数据&#xff0c;如果泄露可能会危及您产品的安全性。这些变量本地存储在每个用户的本地系统中&#xff0c;不应该签入存储库。每个用户都有这些变量的副本。 配置 在根项目中创建一个名为 .env 的文件夹&#xff08…

【UE 材质】模型部分透明

材质节点如下&#xff0c;这里简单解释一下。首先通过“Mask”节点将"Texture Coordinate" 节点中的“G”通道分离出来&#xff0c;然后通过“if”节点进行判断&#xff0c;当值小于0.5时为透明&#xff0c;当颜色不小于5时为不透明。可以通过一个参数来控制模型透明…

四、MySQL(表操作)如何添加字段?修改表?删除字段?修改表名?删除表?格式化某张表?

1、添加字段 &#xff08;1&#xff09;基础语法&#xff1a; alter table 表名 add 字段名 类型名(长度) [comment注释] [约束]; &#xff08;2&#xff09;示例&#xff1a;添加nickname这个字段 2、修改表 修改表中某个字段的【数据类型】/【数据类型&字段名】 &…

ArcGIS土地利用程度综合指数分析

成图展示&#xff1a; 土地利用程度综合指数 第一步 准备数据 使用的数据为2010年河南省土地利用类型数据与其行政区划县级数据&#xff08;为了节省操作&#xff0c;这里使用上次实验的部分数据[1]&#xff0c;各土地利用类型已被提取&#xff09; 第二步 面积统计 水域为例…

weblogic/CVE-2018-2894文件上传漏洞复现

启动docker环境 查看帮助文档 环境启动后&#xff0c;访问http://your-ip:7001/console&#xff0c;即可看到后台登录页面。 执行docker-compose logs | grep password可查看管理员密码&#xff0c;管理员用户名为weblogic&#xff0c;密码为lFVAJ89F 登录后台页面&#xff0c;…

openssh---Windows下git安装配置gitlab

安装openssh 1. 专业版Win10/11默认自带&#xff0c;可以查看是否开启 1. Get-WindowsCapability -Online | Where-Object Name -like OpenSSH* 2. Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 3. Add-WindowsCapability -Online -Name OpenSSH.Serve…

合并区间【贪心算法】

合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 class Solution {public int[][] merge(int[…

2023年高教社杯 国赛数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

安装配置mariadb

记录下安装配置mariadb的经历。 环境&#xff1a;ubuntu22 一、apt在线安装 apt代理配置 APT是Ubuntu系统中用于安装和升级软件包的工具&#xff0c;如果本地没有可用的软件包&#xff0c;APT将会连接到远程软件包服务器下载软件包。在某些情况下&#xff0c;用户需要将APT的…