首页
留言
Search
1
在Centos7下搭建Socks5代理服务器
1,205 阅读
2
在windows11通过Zip安装Mysql5.7
727 阅读
3
Mysql5.7开放远程登录
634 阅读
4
数据库
619 阅读
5
mysql5.7基本命令
523 阅读
综合
正则表达式
git
系统
centos7
ubuntu
kali
Debian
网络
socks5
wireguard
运维
docker
hadoop
kubernetes
hive
openstack
ElasticSearch
ansible
前端
三剑客
Python
Python3
selenium
Flask
PHP
PHP基础
ThinkPHP
游戏
我的世界
算法
递归
排序
查找
软件
ide
Xshell
vim
PicGo
Typora
云盘
安全
靶场
reverse
Java
JavaSE
Spring
MyBatis
C++
QT
数据库
mysql
登录
Search
标签搜索
java
centos7
linux
centos
html5
JavaScript
php
css3
mysql
spring
mysql5.7
linux全栈
ubuntu
BeanFactory
SpringBean
python
python3
ApplicationContext
kali
mysql8.0
我亏一点
累计撰写
139
篇文章
累计收到
34
条评论
首页
栏目
综合
正则表达式
git
系统
centos7
ubuntu
kali
Debian
网络
socks5
wireguard
运维
docker
hadoop
kubernetes
hive
openstack
ElasticSearch
ansible
前端
三剑客
Python
Python3
selenium
Flask
PHP
PHP基础
ThinkPHP
游戏
我的世界
算法
递归
排序
查找
软件
ide
Xshell
vim
PicGo
Typora
云盘
安全
靶场
reverse
Java
JavaSE
Spring
MyBatis
C++
QT
数据库
mysql
页面
留言
搜索到
139
篇与
1585364631
的结果
2023-02-24
Linux主机开启支持IPv6访问IPv4
Linux主机开启支持IPv6访问IPv4修改主机的DNS解析echo -e "nameserver 2001:67c:2b0::4\nnameserver 2001:67c:2b0::6" > /etc/resolv.conf
2023年02月24日
300 阅读
0 评论
1 点赞
2023-02-23
Typora 配置图片自动通过 PicGo 上传
Typora 配置图片自动通过 PicGo上传文件-偏好设置-图片配置如下:
2023年02月23日
173 阅读
0 评论
0 点赞
2023-02-23
PicGo 配置上传到 Backblaze 对象存储
PicGo 配置上传到 Backblaze 对象存储1.环境准备下载PicGo Gui 版本并且安装PicGohttps://picgo.github.io/PicGo-Doc/zh/2.在Backblaze 创建密钥进入账户中应用程序键生成应用程序密钥3.在PicGo Gui中搜索插件并且安装搜索内容:s34.配置插件并且保存参数字段详解PicGo Amazon S3 插件 | WAYJAMimages/{year}/{month}/{day}/{md5}.{extName}public-read5.选择图床并且测试上传完
2023年02月23日
178 阅读
0 评论
0 点赞
2023-02-23
Backblaze + Cloudflare 搭建免费对象存储
Backblaze + Cloudflare 搭建免费对象存储0.预先提醒任何免费的东西都有失效的一天,并且最好不要绑定任何支付卡,以免后续带来不必要的麻烦,并且Cloudflare只为了做缓存和免费流量使用,资源加载效果不如意,谨慎选择使用1.环境准备Cloudflare 能正常使用的账号一个 点我进入Backblaze 能正常使用的账号一个(注册可能需要魔法上网) 点我进入任意一级域名一个(要求可以修改域名服务器的DNS地址)2.CF宽带联盟Cloudflare CDN(内容交付网络)与微软、谷歌、IBM Cloud等共同组建了带宽联盟,即由公司组成的一个联盟,旨在减少通过内容交付网络的数据费用。实现支持列表3.由CloudFlare管理域名在CloudFlare平台中添加站点选择Free计划并且继续在域名提供商处,修改域名的DNS服务器为Cloudflare的DNS服务器(例如我的域名是腾讯云)等待一段时间后在CloudFlare检查名称服务器即可4.backblaze创建桶PS:右下角可以将语言设置为简体中文新建桶,桶名字自定义,权限选择公共点击桶设定,桶信息中填入{"cache-control":"max-age=720000"}设置最大缓存,并且点击更新桶跨域CORS规则自行选择(我这里选择全开放跨域)记录下Endpoint的地址点击 "上载/下载" ,并且随便上传一个文件,并且点击该文件最右边的信息记录下友好URL的地址5.配置CloudFlareDNS中添加解析,如图配置SSL/TLS中配置端对端加密,两个完全任选一个规则中新建页面规则,URL填写为DNS中添加的二级域名,并且按如下配置保存例如:https://img.xxxxxx.xxx/*等待一段时间后,便可以将友好URL中的地址替换为自己的二级域名然后访问了6.重定向地址隐藏桶名此时虽然已经可以通过自定义的域名访问上传的图片,但是“/file/桶名”暴露在公众视野当中,也就是说,不法分子可以通过将域名地址修改为友好URL域名地址,这样子就会导致访问Backblaze的数据不会经过CloudFlare从而直接访问Backblaze,最终导致有流量被盗刷的风险,所以此时在CloudFlare中添加URL重写规则进行隐藏在规则中的转换规则中创建重写URL规则,字段选择主机名,运算符选择等于,值填入你自己定义的域名格式例如img.xxxxxx.xxx路径重写到选择Dynamic,并且填入值concat("/file/你的桶名", http.request.uri.path)保存此时虽然桶名被隐藏了,但是网络请求中会出现Backblaze的专属字段,所以需要再创建一个修改响应头,将Backblaze的专属字段删除其他配置和上面一样,则...添加删除四个标头x-bz-content-sha1x-bz-file-idx-bz-file-namex-bz-upload-timestamp7.搭建完成自行体验配置PicGo
2023年02月23日
276 阅读
0 评论
0 点赞
2023-02-22
Java 基于xml的Spring应用
Java 基于xml的Spring应用1.SpringBean 的配置解析Spring开发中主要是对Bean的配置,Bean的常用配置一览如下: 1.Bean的基础配置配置UserDaoImpl由Spring容器负责管理<bean id="userDao" class="org.example.UserDaoImpl"></bean>此时存储到Spring容器(singleObjects单例池)中的Bean的beanName是userDao,值是UserDaoImpl对象,可以根据beanName获取Bean实例applicationContext.getBean("userDao")如果不配置id,则Spring会把当前Bean实例的全限定名作为beanNamepublic static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); UserDao bean = (UserDao) applicationContext.getBean("org.example.UserDaoImpl"); System.out.println(bean); }如果配置了id,便不能在使用Bean实例的全限定名进行获取,例如:applicationContext.getBean("org.example.UserDaoImpl");配置别名,配置别名后可以使用别名获得Bean对象实例<bean id="userDao" name="aaa,bbb" class="org.example.UserDaoImpl"></bean>2.SpringBean的配置详解1.Bean的范围配置默认情况下,单纯的Spring环境Bean的作用范围有两个:Singleton和Prototypesingleton:单例,默认值,Spring容器创建的时候,就会进行Bean的实例化,并且存储到容器内部的单例池中,每次getBean时都是从单例池中获取相同的Bean实例<bean id="userDao" class="org.example.UserDaoImpl" scope="singleton"></bean>prototype:原型,Spring容器初始化时不会创建Bean实例,只有调用getBean时才会实例化Bean,每次getBean都会创建一个新的Bean实例<bean id="userDao" class="org.example.UserDaoImpl" scope="prototype"></bean>如果是spring-webmvc的情况下,还会增加两个作用范围:request和sessionmaven导包<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.7</version> </dependency>request:将创建的对象放在request域当做<bean id="userDao" class="org.example.UserDaoImpl" scope="request"></bean>session:将创建的对象放在session域当做<bean id="userDao" class="org.example.UserDaoImpl" scope="session"></bean>2.Bean的延迟加载当lazy-init设置为true时为延迟加载,也就是当Spring容器创建的时候,不会立即创建Bean实例,等待用到时在创建Bean实例并且存储到单例池中去,后续在使用该Bean直接冲单例池获取,本质上该Bean还是单例的,只对scope设置为singleton的Bean起作用,对prototype无效,对BeanFactory作为容器也无效<bean id="userDao" class="org.example.UserDaoImpl" lazy-init="true"></bean>3.Bean的初始化方法和销毁方法init-method:初始化时运行方法destroy-method:销毁时运行方法,单例模式容器必须显示关闭才会执行这个方法,否则不会执行关闭,又因为ApplicationContext的接口没有关闭容器的方法,所以类型需要使用ClassPathXmlApplicationContext,才有close显式关闭容器,如果不使用显式关闭,则有可能不会执行销毁方法,例如容器挂掉后就无法执行销毁方法beans.xml:<bean id="userDao" class="org.example.UserDaoImpl" init-method="init" destroy-method="destroy"></bean>UserDaoImpl.javapublic class UserDaoImpl implements UserDao{ public void init(){ System.out.println("初始化方法"); } public void destroy(){ System.out.println("销毁方法"); } }主函数调用 public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); System.out.println(userDao); applicationContext.close(); }结果输出初始化方法 org.example.UserDaoImpl@7d68ef40 销毁方法扩展:除此之外,我们还可以通过实现InitializingBean接口,完成一些Bean的初始化操作,比init-method方法优先级要高UserDaoImpl.javapublic class UserDaoImpl implements UserDao, InitializingBean { public void init(){ System.out.println("初始化方法"); } public void destroy(){ System.out.println("销毁方法"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("属性执行之后进行调用"); } }主函数调用public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); System.out.println(userDao); applicationContext.close(); }结果输出属性执行之后进行调用 初始化方法 org.example.UserDaoImpl@5b0abc94 销毁方法4.Bean的实例化配置Spring的实例化方式主要如下两种:构造方式实例化:底层通过构造方法对Bean进行实例化工厂方式实例化:底层通过调用自定义的工厂方法对Bean进行实例化构造方式实例化Bean分为有参构造和无参构造方法实例化,Spring中配置的<bean>几乎都是无参构造,有参构造例子如下:UserDaoImpl.javapublic class UserDaoImpl implements UserDao { public UserDaoImpl(String name){ System.out.println(name); } }有参构造在实例化Bean时,需要参数的注入,通过constructor-arg标签,嵌入在bean标签内部提供构造参数beans.xml<bean id="userDao" class="org.example.UserDaoImpl"> <constructor-arg value="你好"/> </bean>工厂方式实例化Bean,又分为如下三种:静态工厂方法实例化Bean实例工厂方法实例化Bean实现FactoryBean规范延迟实例化Bean静态工厂实例化Bean:创建一个静态方法public class MyBeanFactory1 { public static UserDao userDao(){ return new UserDaoImpl(); } }配置beans.xml文件,factory-method指定静态方法,如果有传参也需要constructor-arg进行传值<bean id="userDao1" class="factory.MyBeanFactory1" factory-method="userDao"></bean>主函数调用public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); Object useDao1 = applicationContext.getBean("userDao1"); System.out.println(useDao1); }执行结果org.example.UserDaoImpl@159f197实例工厂方法化Bean:创建一个方法public class MyBeanFactory2 { public UserDao userDao(){ return new UserDaoImpl(); } }beans.xml中配置该静态方法对bean,并且再次配置一个bean指向该bean,并且使用方法,如果有传参也需要constructor-arg进行传值<!-- 配置工厂对象 --> <bean id="myBeanFactory2" class="factory.MyBeanFactory2"></bean> <bean id="userDao2" factory-bean="myBeanFactory2" factory-method="userDao"></bean>主函数执行 public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); Object userDao2 = applicationContext.getBean("userDao2"); System.out.println(userDao2); }结果输出org.example.UserDaoImpl@51e5fc98实现FactoryBean规范延迟实例化Bean类的接口继承于FactoryBean,在BeanFactory创建时便已经创建实例,但是实例的值并不是真实的对象本身,而是当getBean进行调用的时候,才会将实例对象新建调用getObject方法并且存放到缓存池,然后从缓存池取值从而返回实例对象,如果后续进行重复取值,不会再创建一个新的对象,而是从缓存池取值后直接返回,从而实现FactoryBean规范延迟加载Beanpublic class MyBeanFactory3 implements FactoryBean<UserDao> { @Override public UserDao getObject() throws Exception { return new UserDaoImpl(); } @Override public Class<?> getObjectType() { return null; } }主函数调用public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); Object userDao3 = applicationContext.getBean("userDao3"); Object userDao4 = applicationContext.getBean("userDao3"); System.out.println(userDao3); System.out.println(userDao4); }运行结果org.example.UserDaoImpl@48fa0f47 org.example.UserDaoImpl@48fa0f475.Bean的注入方式 其中,ref是reference的缩写,翻译为参考涉及到意思,用于引入其他Bean的id。value用于注入普通的属性值。6.Bean的依赖注入配置配置注入普通类型的List对象配置接口public interface UserService { public List<String> getStringList(); }配置实现类public class UserServiceImpl implements UserService { //注入List private List<String> stringList; public void setStringList(List<String> stringList) { this.stringList = stringList; } public List<String> getStringList() { return stringList; } }配置Beans.xml文件<bean id="userService" class="org.example.UserServiceImpl"> <property name="stringList"> <list> <value>aaaa</value> <value>bbbb</value> <value>cccc</value> <value>dddd</value> </list> </property> </bean>主函数运行ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); UserService userService = (UserService) applicationContext.getBean("userService"); System.out.println(userService.getStringList());运行结果[aaaa, bbbb, cccc, dddd]配置注入引用类型的List对象UserServicelmpl.javapublic List<String> getStringList() { return stringList; } public void setUserDaoList(List<UserDao> userDaoList) { this.userDaoList = userDaoList; }beans.xml需要配置ref或者单独创建bean<bean id="useService1" class="org.example.UserServiceImpl"> <property name="userDaoList"> <list> <bean class="org.example.UserDaoImpl"/> <bean class="org.example.UserDaoImpl"/> <bean class="org.example.UserDaoImpl"/> <bean class="org.example.UserDaoImpl"/> </list> </property> </bean>或者<bean id="userDao1" class="org.example.UserDaoImpl"/> <bean id="userDao2" class="org.example.UserDaoImpl"/> <bean id="userDao3" class="org.example.UserDaoImpl"/> <bean id="userDao4" class="org.example.UserDaoImpl"/> <bean id="useService1" class="org.example.UserServiceImpl"> <property name="userDaoList"> <list> <ref bean="userDao1"/> <ref bean="userDao2"/> <ref bean="userDao3"/> <ref bean="userDao4"/> </list> </property> </bean>配置注入引用类型的set对象配置和List一样,在beans.xml文件中,将list标签改为set配置注入引用类型的map对象配置和List一样,在beans.xml文件中,将list标签改为map,map中标签为entry,key为键名,value为键值,value-ref为引用对象<property name="map"> <map> <entry key="a" value="1111"/> <entry key="b" value="2222"/> </map> </property> <property name="map"> <map> <entry key="a" value-ref="userDao1"/> <entry key="b" value-ref="userDao2"/> </map> </property>
2023年02月22日
218 阅读
0 评论
0 点赞
1
...
6
7
8
...
28