《汉水》

《汉水》
红熒
万古长夜奔流逝,涛涛浪水竞自行。
男儿径须闹将去,莫使龙颜覆水流。
季祖成事犹暮年,少华何惧蹉跎行。
湖海形汇万水源,银尘簇拥星汉明。

Read More

《露世》

《露世》
红熒
雏羽非自卫,固封永不成。
虽己安此世,与世从此隔。
自古获梦鳞,需予它物行。
然习立世艺,抛我踊跃空。

  你如果不想让自己伤害,可以将自己封闭,但是这样你就永远不会成长,更不会有更大的提高,你的自我保护只会让你与这个世界永远割裂,然后逐渐被别人淘汰而已,自古就有获得一个东西需要用另一个东西交换的道理,那么对于你想学习的东西,你必须能够或者勇敢将自己抛出去,让自己展露在社会与压力中,去主动面对,你才能主动去学习,去创造,你才能真正地去锻炼,才能超越自己。

Read More

Spring mvc配置消息转换器

配置消息转换器

配置FastJson转换器

  • 选择一个配置文件类实现WebMvcConfigurer

  • 重写configureMessageConverters方法注册添加消息转换器,需要配置UTF-8格式。

     public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
            FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
    //        FastJsonConfig fastJsonConfig = new FastJsonConfig();
            List<MediaType> fastMediaTypes = new ArrayList<>();
            fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
            converter.setSupportedMediaTypes(fastMediaTypes);
            converters.add(converter);
        }
        @Autowired
        public SpringMvcConfig(UserController u){
    
        }

钩子方法

父类定义一个模版方法,即方法中没有内容,但是有参数,子类重写方法,此时使用多态赋值父类,父类调用钩子方法,通过方法参数就能钓到子类运行后的值,本质就是地址里的值改变了,地址其实没有变,钩子里有个小参数诱饵但是经过执行后,钓到了大的鱼,即将其附上了其他值。对于spirng中就是容器实例化的自动注入,实现多态,然后钩子调用。

  • 父类,但是方法上加了@Bean 此时如果IOC容器中有子类实例,则会多态自动注入到this中, 通过System.out.println(this);以及通过一个Controller类自动注入实现类,然后输出地址,你会发现其实是一个地址,也就是此时this其实就是其容器里注册后子类实例,然后spirng启动后会扫描执行该方法,此时容器是没有该类实例,只有实现类实例。
public  class Student {
    private String name;
    private int age;

    @Bean
    public void beanTest(){
        List<Integer>ss =new ArrayList<>() ;
        this.hook(ss);
        //ss相对于鱼饵
        System.out.println(this);
        //此时ss变成了大鱼,因为里面有东西了。
        System.out.println("勾中了"+ss.toString());

    }

	//钩子方法
    public void hook(List<Integer> s){
        System.out.println(name);
    }
    //有参构造
    public Student(String name, int age){
        this.name = name;
        this.age = age;
    }



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  • 子类,类上加了Componet注解,告诉容器要创建实例,然后重写了钩子方法,同时s加上了1。

    @Component
    public class MyTest extends Student {
        private String name;
        private int age;
    
        public MyTest() {
            super("123",10);
            this.name ="ssss";
            this.age =30;
        }
    
        @Override
        public void hook(List<Integer> s) {
            s.add(1);
            System.out.println("重写了");
        }
    
    }
  • 输出结果

    image-20240930154947457

    而此时的自动注入的输出为:(具体代码不放了,应该都会)

    image-20240930155027186

    可以发现实现了钩子功能,钓上了1。这就是钩子方法,其实原理就是多态然后方法内值改了,不过记住前提地址不能变,否则达不到效果,因为spring的注解+IOC容器原理,所以我们会理解不了。

@EnableWebMvc注解

Read More

注解二

注解的解析

注解的解析

  • 需要解析那个对象的注解就加载那个对象,例如:解析类则获取Class对象(反射);
  • 常用方法:
    • isAnnotationPresent(Class<?> class);是否存在该注解;
    • getDeclaredAnnotation(Class<?> class); 获取注解对象(需要强转);
    • getDeclaredAnnotations();获取所有注解构成的数组;
    • 注解对象.属性(方法)获取属性值。

Read More

注解

注解

注解为特殊标记,用于告诉程序如何执行

自定义注解

public @interface a{
    public String name() default 默认值;//将方法作为属性。
    String value();//特殊属性,即默认属性,即如果就只有一个value属性,则使用注解时无需指定value,默认赋值给value,注:此时的只有一个value属性,不仅代表注解只有一个value,如果注解有多个属性,但是多个属性都有默认值的话,则value属性也是可以不用写(value有默认值也是可以)。
        
}

元注解

注解注解的注解😏,第一个注解为动词,后面两个为名词。

  • @Retention() 声明注解作用时机,即保留周期
    • RetentionPolicy枚举类
      • SOURCE 只作用源码阶段,字节码文件中不存在。
      • CLASS(默认值)存在于源码与class文件中,但是运行时消失。
      • RUNTIME 一直到运行时都存在。
  • @Target() 声明注解作用位置
    • ElementType 枚举类
      • TYPE 类,接口
      • FIELD, 成员变量
      • METHOD, 成员方法
      • PARAMETER, 方法参数
      • CONSTRUCTOR, 构造器
      • LOCAL_VARIABLE ,局部变量

Read More