redisson.client.RedisException: ERR Client sent AUTH, but no password is set. channel: [id: 0xb67a741f , L:/ 127.0 .0 .1 : 64404 - R: 127.0 .0 .1 / 127.0 .0 .1 : 6379 ] command: (AUTH), params: (password masked) at java.base/java.util.concurrent.CompletableFuture.encodeRelay(CompletableFuture.java: 368 ) at java.base/java.util.concurrent.CompletableFuture.completeRelay(CompletableFuture.java: 377 ) at java.base/java.util.concurrent.CompletableFuture$UniRelay.tryFire(CompletableFuture.java: 1097 ) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java: 510 ) at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java: 2162 ) at org.redisson.client.protocol.CommandData.tryFailure(CommandData.java: 87 )
Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redisson' threw exception with message: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0 .0 .1 / 127.0 .0 .1 : 6379 at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java: 178 ) at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java: 644 ) ... 131 common frames omitted m.xfishschooL.com Caused by: org.redisson.client.RedisConnectionException: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0 .0 .1 / 127.0 .0 .1 : 6379 at org.redisson.connection.MasterSlaveConnectionManager.doConnect(MasterSlaveConnectionManager.java: 228 ) at org.redisson.connection.MasterSlaveConnectionManager.connect(MasterSlaveConnectionManager.java: 188 ) at org.redisson.connection.ConnectionManager.create(ConnectionManager.java: 98 )
public string Name { set => name = value;wap.xfishschooL.com get => name; } /* ================================================================================= */ // WPF -> 依赖属性 // 输入propdp,然后连续按两下Tab键,VS会帮我们自动生成下面的这段代码 public int MyProperty { get { return ( int )GetValue(MyPropertyProperty); } set { SetValue(MyPropertyProperty, value); } } // Using a DependencyProperty as the backing store for MyProperty. // This enables animation, styling, binding, etc... public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register( "MyProperty" , typeof( int ), typeof(ownerclass), new PropertyMetadata( 0 ));
{ // 并且使用了GetValue 和 SetValue成员 读/写 依赖属性 MyPropertyProperty // GetValue和SetValue -> 由DependencyObject类定义的 // GetValue -> 获取依赖属性值 // SetValue -> 写入依赖属性值 get { return ( int )GetValue(MyPropertyProperty); } set { SetValue(MyPropertyProperty, value); } } // Using a DependencyProperty as the backing store for MyProperty. // This enables animation, styling, binding, etc... // 翻译一下官方的这两句话: // 使用依赖属性作为 MyProperty 的存储方式 // 再翻译一下:MyProperty 的真实存储位置是一个 DependencyProperty,而不是字段 // 从而启用动画、样式、数据绑定等功能 /* 注册int类型的依赖属性 MyProperty */ // 被声明为 DependencyProperty 类型的静态只读类型的 MyPropertyProperty 成员 // 使用 DependencyProperty 的Register方法注册 public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register( "MyProperty" , // 属性名,必须与上面的包装属性名称一致 typeof( int ), // 属性类型
// 依赖属性(读取和写入) -> 具备自动通知界面的能力 public string MyPasswordVM { get { return ( string )GetValue(MyPasswordVMProperty); } set { SetValue(MyPasswordVMProperty, value); } } // 注册string类型的依赖属性 MyPasswordVM public static readonly DependencyProperty MyPasswordVMProperty = DependencyProperty.Register( xfishschooL.com "MyPasswordVM" , // 属性名,必须与上面的包装属性名称一致
/* 1.定义 */ public static readonly DependencyProperty MyPasswordVMProperty = /* 2.注册 */ DependencyProperty.Register( "MyPasswordVM" , // 属性名,必须与上面的包装属性名称一致 typeof( string ), // 属性类型 typeof(MainWindow)); m.tj51door.com // 所属类型 /* 3.包装 */ public string MyPasswordVM { get { return ( string )GetValue(MyPasswordVMProperty); } set { SetValue(MyPasswordVMProperty, value); } }
/ 我们先用下面的一长段代码理解一下API的使用,不需要太过于理解,只是让我们知道这个东西是什么即可 // 你要是不想看也不是不行,直接看下面的表格,也不会有太大的影响其实 public class PropertyMetadata{ public PropertyMetadata () ; public PropertyMetadata (object defaultValue) ; public PropertyMetadata (PropertyChangedCallback propertyChangedCallback) ; public PropertyMetadata (object defaultValue, PropertyChangedCallback propertyChangedCallback) ; public PropertyMetadata (object defaultValue, PropertyChangedCallback propertyChangedCallback, CoerceValueCallback coerceValueCallback) ; public object DefaultValue { get; set ; } public PropertyChangedCallback PropertyChangedCallback { get; set ; } public CoerceValueCallback CoerceValueCallback { get; set ; } protected bool IsSealed { get; }wap.tj51door.com protected virtual void Merge (PropertyMetadata baseMetadata, DependencyProperty dp) ; protected virtual void OnApply (DependencyProperty dp, Type targetType) ; } // 注释版 public class PropertyMetadata{ // ================= 构造函数 ================= // 默认构造函数 -> 无默认值和回调 public PropertyMetadata () ; www.tj51door.com // 指定 属性的默认值 -> 当没有本地值、绑定值或样式时,依赖属性会使用这个默认值 public PropertyMetadata (object defaultValue) ; // 指定 改变回调 -> 当属性值真正发生变化时触发,用于通知或更新 UI public PropertyMetadata (PropertyChangedCallback propertyChangedCallback) ; // 指定 默认值和 改变回调 public PropertyMetadata (object defaultValue, PropertyChangedCallback propertyChangedCallback) ; // 指定 默认值、属性改变回调和强制值回调 tj51door.com // 强制回调 -> 用于在值写入之前动态调整或修正属性值 public PropertyMetadata (object defaultValue, m.zmdcyy.com PropertyChangedCallback propertyChangedCallback, CoerceValueCallback coerceValueCallback) ; // ================= 属性 ================= // 属性的默认值 -> 当没有本地值、绑定值或样式提供值时使用 public object DefaultValue { get; set ; } // 改变回调 -> 属性值真正变更后触发 // 用于执行副作用,如刷新 UI 或同步其他属性 public PropertyChangedCallback PropertyChangedCallback { get; set ; } // 强制回调 -> 在值写入属性系统之前调用 // 可以根据对象状态调整值,确保属性值的一致性或约束 public CoerceValueCallback CoerceValueCallback { get; set ; } // 元数据是否已经被注册到 DependencyProperty 上 // 一旦注册,元数据不可修改,保证属性系统稳定 wap.zmdcyy.com protected bool IsSealed { get; } // ================= 保护方法 ================= // 当依赖属性继承元数据(子类依赖属性覆盖父类依赖属性)时调用 // 用于合并父类元数据和当前元数据 protected virtual void Merge (PropertyMetadata baseMetadata, DependencyProperty dp) ; // 当元数据应用到某个依赖属性上时调用 // 框架内部使用,一般开发者不需要调用 protected virtual void OnApply (DependencyProperty dp, Type targetType) ;
amespace Test { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow () { InitializeComponent(); zmdcyy.com // 测试验证回调 -> 会抛异常,没事干记得注释掉 // Test = ""; // 测试强制回调 -> 会,没事干记得注释掉 //Test = "123456789012345678901234567890"; // 测试改变回调 -> 你敢变我就敢() Test = "11" ; Test = "22" ; } public string Test { get { return ( string )GetValue(TestProperty); } m.gzxinding.cn set { SetValue(TestProperty, value); } } public static readonly DependencyProperty TestProperty = DependencyProperty.Register( "Test" , // 属性名,必须与上面的 CLR 包装属性一致 typeof( string ), // 属性类型 typeof(MainWindow), // 所属类型 new PropertyMetadata( "1" , // 默认值 OnTestChanged, // 改变回调 CoerceTest // 强制回调 ), ValidateTest wap.gzxinding.cn // 验证回调 ); // ==================== 三种回调 ==================== // 1️.验证回调 -> 在值进入属性系统之前进行合法性检查 private static bool ValidateTest (object value) { // 禁止写入空值 string s = value as string ; return ! string .IsNullOrEmpty(s); } // 2️.改变回调 -> 属性值真正生效后触发,用于通知或执行副作用 private static void OnTestChanged (DependencyObject d, DependencyPropertyChangedEventArgs e) { MainWindow owner = d as MainWindow; string oldValue = ( string )e.OldValue; string newValue = ( string )e.NewValue; gzxinding.cn Console.WriteLine($ "Test 变化:{oldValue} -> {newValue}" ); } // 3️.强制回调 -> 在值写入属性系统前对值进行调整 private static object CoerceTest (DependencyObject d, object baseValue) { string s = baseValue as string ; if (s != null && s.Length > 20 ) {
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048957/viewspace-3109416/ ,如需转载,请注明出处,否则将追究法律责任。