2020.1.19学習ノート

14611 ワード

学習ノート
  • 前言
  • アプリケーションContextコンテキスト
  • Integer型回転Long型
  • javaの現在のクラス名とメソッド
  • を取得
  • SpringBoot RedisTemplate注入失敗
  • System.currentTimeMillis()
  • System.currentTimeMillis()現在の時間を取得
  • 前言
    今日出勤する時、いくつかの穴を踏んで、まず彼を一つ一つ覚えて、勉強と見なしました.
    アプリケーションコンテキスト
  • 通常コンテキストを取得するには、ApplicationContextAwareインタフェース
  • を実装する必要があります.
    package com.xiaoxiao.current_limiting.util;
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    @Component
    public class SpringContextUtil implements ApplicationContextAware {
    
    
        private static ApplicationContext applicationContext;
        /**
                    applicationContext
                       applicationContext           
        */
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.applicationContext = applicationContext;
       }
    
    	/**
    	               ,    new       @Autowared   ,         Bean   
    	*/
        public static <T> T getBean(Class<T> c) {
            return (T) applicationContext.getBean(c);
        }
    
    }
    
    
  • 注意:自分のnewクラスは@Autowaredで注入できないので、Beanを取得する方法を書いて、applicationContext、getBean()を使います.

  • Integer型回転Long型
  • Integer回転Longタイプは、基本タイプのように自動的にアップグレードすることはできません
  • メソッド:まずStringタイプに変換し、さらにLong.valueof(String)でLongタイプ
  • に変換する
    Javaの現在のクラス名とメソッドの取得
  • Thread
  • を使用
    String clazz = Thread.currentThread().getStackTrace()[1].getClassName();
    
    String method = Thread.currentThread().getStackThread()[1].getMethodName();
    
  • getClass(インスタンスオブジェクトのみ)
  • を使用
    String clazz = this.getClass().getName();//    
    

    SpringBoot RedisTemplate注入失敗
  • 実は私が注入に失敗した原因はクラスにRedisTemplateを注入したからですが、私はnewの形式で作成したので、これは明らかにだめですが、ネット上のRedisTeplate注入に失敗した他の原因があるのを見て、後で間違いを避けるために、まず記録して
  • を勉強しました.
  • 依存を導入すると、2つのRedisTemplate
  • が自動的に注入されます.
    @Configuration
    @ConditionalOnClass(RedisOperations.class)
    @EnableConfigurationProperties(RedisProperties.class)
    @Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
    public class RedisAutoConfiguration {
    
    	//   Object,Object
        @Bean
        @ConditionalOnMissingBean(name = "redisTemplate")
        public RedisTemplate<Object, Object> redisTemplate(
                RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
            RedisTemplate<Object, Object> template = new RedisTemplate<>();
            template.setConnectionFactory(redisConnectionFactory);
            return template;
        }
    
    	//    String,String
        @Bean
        @ConditionalOnMissingBean
        public StringRedisTemplate stringRedisTemplate(
                RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
            StringRedisTemplate template = new StringRedisTemplate();
            template.setConnectionFactory(redisConnectionFactory);
            return template;
        }
    }
    
  • しかし、我々が一般的に注入するタイプはString、Objectであり、明らかに公式はこのBeanの作成を助けていないが、我々の一般的な導入方法は
  • である.
    
    	//     
        @Autowired
        private RedisTemplate<String, Object> redisTemplate;
    
    
  • 特定のタイプを指定しない場合は、
  • にインポートできます.
    	//        
    	@Autowired
    	private RedisTemplate redisTemplate;
    
  • RedisTemplate注入時に@Autowiredが使用され、@Autowiredはデフォルトでタイプ別にアセンブリされます.つまり、RedisTemplateのBeanを取得するには、名前に合わせて組み立てる必要があります.では、@Resourceを使用したいのは当然ですが、デフォルトでは名前で組み立てられています.コードを変更できます:
  • 	//      ,      	
    	@Resource
        private RedisTemplate<String, Object> redisTemplate;
    
  • もう一つの方法は、自分でString、ObjectタイプのRedisTemplate
  • を書くことです.
    System.currentTimeMillis()
  • 普段はnew Date()で時間を取得していますが、単純にミリ秒数を取得するとSystem.currentTimeMillis()の性能がよくなります.
  • System.currentTimeMillis()このミリ秒数は1970年1月1日0時からのミリ秒数で、Date()は実はDate(System.currentTimeMillis()に相当する)
  • System.currentTimeMillis()現在の時刻を取得
    long totalMillisSec = System.currentTimeMillis();//     
    long totalSec = totalMillisSec / 1000; //    
    
    //        
    long currentSec = totalSec % 60;
    
    //      
    long totalMinutes = totalSec / 60;
    long currentMinutes = totalMinutes % 60;
    
      //       
      long totalHour = totalMinutes / 60;
      long currentHour = totalHour % 24;