【狂神】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.mzph.cn/news/63265.shtml

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

相关文章

自然语言处理-NLP

目录 自然语言处理-NLP 致命密码&#xff1a;一场关于语言的较量 自然语言处理的发展历程 兴起时期 符号主义时期 连接主义时期 深度学习时期 自然语言处理技术面临的挑战 语言学角度 同义词问题 情感倾向问题 歧义性问题 对话/篇章等长文本处理问题 探索自然语言…

电脑莫名其妙重启 为设备 ROOT\DISPLAY\0000 加载驱动程序 \Driver\WUDFRd 失败

卸载向日葵即可解决&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;下面是报错日志&#xff0c;估计是远程连接导致的问题

JVM工具-1. jps 虚拟机进程状态工具

文章目录 1. jps介绍2. jps命令格式3. jps工具主要选项4. jps -q5. jps -m6. jps -l7. jps -v 1. jps介绍 jps(JVM Process Status Tool)&#xff1a;虚拟机进程状态工具&#xff0c;可以列出正在运行的虚拟机进程&#xff0c;并显示虚拟机执行主类&#xff08;Main Class&…

ARM寄存器组

CM3 拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器。 R0-R7&#xff0c;通用目的寄存器 R0-R7也被称为低组寄存器&#xff0c;所有指令可以访问它们&#xff0c;它们的字长为32位&#xff0c;复位后的初始值是不可预料的。 R8-R12&#xff0c;通用目的寄存器 R8-R12也被称…

汽车以太网协议栈

《大师说》栏目上线啦# 《大师说》栏目是怿星科技2023年推出的深度思考栏目&#xff0c;通过邀请内部专家&#xff0c;针对智能汽车行业发展、技术趋势等输出个性化的观点。每期一位大师&#xff0c;每位一个话题&#xff0c;本期由我们怿星的CTO虞胜伟&#xff0c;进行分享。…

Elasticsearch 优化

Elasticsearch 优化 2.1硬件选择 Elasticsearch 的基础是 Lucene &#xff0c;所有的索引和文档数据是存储在本地的磁盘中&#xff0c;具体的 路径可在 ES 的配置文件 ../config/elasticsearch.yml 中配置&#xff0c;如下&#xff1a; #----------------------------…

C#,《小白学程序》第十二课:日历的编制,时间DateTime的计算方法与代码

1 文本格式 /// <summary> /// 《小白学程序》第十二课&#xff1a;日历的编制&#xff0c;时间DateTime的计算方法与代码 /// 本课学习时间类型的数据 DateTime 的简单方法&#xff0c;并编制一个月的日历。 /// </summary> /// <param name"sender"…

idea 链接mysql连不上

打开文件 C:\Program Files\JetBrains\IntelliJ IDEA 2023.2.1\jbr\conf\security\java.security修改内容 搜索&#xff1a;jdk.tls.disabledAlgorithms 修改 链接地址 在链接后面添加 ?useSSLfalse jdbc:mysql://127.0.0.1:3306/db_admin3?useSSLfalse

stable diffusion实践操作-提示词

本文专门开一节写提示词相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 提示词网站&#xff1a; https://promptheroes.cn/https://prompthero.com/https://www.prompthunt.com/promptthunt无界AI 正文 1、提示词的原理 提…

计算机视觉-卷积神经网络

目录 计算机视觉的发展历程 卷积神经网络 卷积&#xff08;Convolution&#xff09; 卷积计算 感受野&#xff08;Receptive Field&#xff09; 步幅&#xff08;stride&#xff09; 感受野&#xff08;Receptive Field&#xff09; 多输入通道、多输出通道和批量操作 …

苹果使用3D打印技术制造Apple Watch Series 9手表外壳

据彭博社的马克・古尔曼报道&#xff0c;苹果公司正在使用 3D 打印技术来制造即将推出的部分Apple Watch Series 9 的外壳。这种制造工艺可以节省传统数控加工所需的大量金属材料&#xff0c;同时缩短生产时间。这与之前苹果分析师郭明錤的说法相吻合。 苹果公司自2021年推出Ai…

个性化定制界面还是极简版原装界面?我的选择是……

个性化定制界面和极简版原装界面&#xff0c;哪一个你用起来更加顺手呢&#xff0c;相比之下你更喜欢哪一个&#xff1f;来聊一聊原因吧&#xff01; 一、我的观点和选择 个性化定制界面和极简版原装界面&#xff0c;二者各有优缺点。 &#xff08;一&#xff09;极简版原装…

如何判断自己的qt版本呢?

如何判断自己的qt版本呢? 前情提要很简单,按照如下图所示,即可查看当前打开的qtCreator的版本如何打开5.15.2版本的qtCreator呢?安装教程 前情提要 我的电脑已经安装了qt5.14.1,然后我又安装了qt5.15.2,我想尝试一下同一台电脑能否适应两个版本的qt? 当我安装完成qt5.15.2后…

Idea安装免注册版ChatGPT

文章目录 一、前期准备二、开始使用 一、前期准备 1.准备Idea开发软件并打开&#xff08;VS Code同理&#xff09;! 2.【CtrlAltS】快捷键调出Settings窗口&#xff0c;如图 3.找到NexChatGPT 此插件不需要注册&#xff0c;可以直接使用&#xff08;高级一些的需要会员收费限…

Kubernetes(k8s)当中安装并使用ingress暴露应用

Kubernetes当中安装并使用ingress暴露应用 为什么需要Ingress前期准备集群准备LoadBalancer准备 安装Ingress-Nginx下载地址v1.3.1v1.8.1 修改文件v1.3.1v1.8.1修改ingress服务类型配置 执行安装 部署应用通过ingress-nginx暴露应用部署ingress的yaml文件v1.3.1v1.8.1 为什么需…

Linux(CentOS7)下如何配置多个Tomcat容器?

一、在 liunx 系统安装 jdk 1、安装jdk&#xff08;yum install 安装&#xff09; 查看是否系统是否自带jdk并卸载 rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 其中&#xff0c;GCJ是GNU的Java编译器,可以把java程序编译成本地代码&#xff0c;编译成功后的可…

浅谈多人游戏原理和简单实现。

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;websocket、网络、原理、多人游戏☀️每日 一言&#xff1a;这世上有两种东西无法直视&#xff0c;一是太阳&#xff0c;二是人心&#xff01; 一、我的游戏史 我最开始接触游戏要从一盘300游戏…

nginx反向代理 负载均衡

目录 1.反向代理介绍&#xff1a; 2.七层代理和四层代理&#xff1a; 2.1 七层代理&#xff1a; 2.2 四层代理&#xff1a; 3.反向代理web服务器&#xff1a; 3.1 代理服务器配置&#xff1a; 3.2 服务器配置 &#xff1a; 3.3 客户端访问&#xff1a; 3.4 代理不同端口&am…

VMware虚拟机的安装以及安装CentOS系统

VMware虚拟机是一款非常受欢迎的虚拟化软件&#xff0c;它可以模拟一台计算机运行在另一台计算机上&#xff0c;从而实现在一台物理机器上运行多个虚拟机的目的。在本文中&#xff0c;我们将会介绍如何安装VMware虚拟机并在其中安装CentOS操作系统。 文章目录 &#x1f4c0;VMw…

微机原理 || 8253接口芯片知识点+4道经典例题+手写解题过程

&#xff08;二&#xff09;经典考题&#xff1a; 【例1】: 设8253端口地址为300H&#xff5e;303H&#xff0c;要求计数器2工作在方式5&#xff0c;二进制计数&#xff0c;CLK22MHz&#xff0c;OUT21KHz。试按上述要求完成8253的初始化。 【例2】&#xff1a;选择计数器0工…