美文网首页
后端小问题汇总

后端小问题汇总

作者: 山与海Lucky7 | 来源:发表于2021-05-13 10:21 被阅读0次

Java Md5_16位/32位加密方式

private static String getMd5_16(String string) {
    // TODO Auto-generated method stub
    return encrypt32(string).substring(8, 24);
}

public static String encrypt32(String encryptStr) {
    MessageDigest md5;
    try {
        md5 = MessageDigest.getInstance("MD5");
        byte[] md5Bytes = md5.digest(encryptStr.getBytes());
        StringBuffer hexValue = new StringBuffer();
        for (int i = 0; i < md5Bytes.length; i++) {
            int val = ((int) md5Bytes[i]) & 0xff;
            if (val < 16)
                hexValue.append("0");
            hexValue.append(Integer.toHexString(val));
        }
        encryptStr = hexValue.toString();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    return encryptStr;
}

调用方法

String pwd = getMd5_16("test"+"test"+sf.format(new Date()));//账户&密码&当天日期

@PostConstruct 注解失效

@PostConstruct   //指定该方法在对象被创建后马上调用 相当于配置文件中的init-method属性
public void init(){
   System.out.println("开始执行初始化...");
   ... ....
}

分析:

  • ClassPathXmlApplicationContext方式装载bean, 则@PostConstruct可以生效;

  • BeanFactory方式装载bean, @PostConstruct初始化方式并没有生效。

参考/引用/转载自:

关于Spring中 @PostConstruct 没有生效的问题
https://blog.csdn.net/u012989337/article/details/81332146

@PostConstruct、构造函数、@AutoWired的执行顺序

Constructor >> @Autowired >> @PostConstruct

参考/引用/转载自:

@PostConstruct、构造函数和@AutoWired的执行顺序
https://blog.csdn.net/YSC1123/article/details/84941075

@PostConstruct详解
https://blog.csdn.net/sunayn/article/details/92840439

static静态变量使用@Value注入方式

@Component
public class MyConfig {
 
    private static String env;
 
    public static String getEnv() {
        return env;
    }
 
    @Value("${env}")
    public void setEnv(String env) {  //一定是在非静态方法setEnv前使用@Value注解
        MyConfig.env = env;
    }
}

参考/引用/转载自:

static静态变量使用@Value注入方式
https://blog.csdn.net/dadaoke/article/details/79460677

反射调用方法时获取bean失败

调用失败的写法:

Service service = (Service)Class.forName("com.service.TestService").newInstance();// 加载类,并实例化对象
Method objMethod = service.getClass().getDeclaredMethod("test");//获取方法
objMethod.invoke(service);//执行方法

解决方案:

通过applicationContext.getBean(“className”)来获取bean。

@Component
public class SpringContextUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext; // Spring应用上下文环境

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(SpringContextUtil.applicationContext == null){
            SpringContextUtil.applicationContext  = applicationContext;
        }
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static Object getBean(String name) throws BeansException {
        return applicationContext.getBean(name);
    }

    public static Object getBean(String name, Class requiredType)
            throws BeansException {
        return applicationContext.getBean(name, requiredType);
    }

    // 通过class获取Bean.
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }
}
Service  service = (Service) SpringContextUtil.getBean(Class.forName("com.service.TestService"));
Method objMethod = service.getClass().getDeclaredMethod("test");//获取方法
objMethod.invoke(service);//执行方法

参考/引用/转载自:

java 反射调用方法时获取bean失败解决方案
https://blog.csdn.net/Marlene_me/article/details/107663050

JAVA中实现让程序等待一段时间的方法

方法一:通过线程的sleep方法。

 Thread.currentThread().sleep(1000);

在需要程序等待的地方加入这个语句,实现让程序等待,这里的参数1000是以毫秒为单位,即这语句可以让程序等待1秒。

方法二:TimeUnit类里的sleep方法。

TimeUnit.DAYS.sleep(1);//天
TimeUnit.HOURS.sleep(1);//小时
TimeUnit.MINUTES.sleep(1);//分
TimeUnit.SECONDS.sleep(1);//秒
TimeUnit.MILLISECONDS.sleep(1000);//毫秒
TimeUnit.MICROSECONDS.sleep(1000);//微妙
TimeUnit.NANOSECONDS.sleep(1000);//纳秒

TimeUnit类提供的方法,其实底层调用的也是Thread类的sleep方法,让程序进行等待。只不过他在上层根据时间单位进行了封装,如上图,共有7种可以选择,可以方便的选择自己需要的时间单位进行使用。

参考/引用/转载自:

JAVA中实现让程序等待一段时间的方法
https://blog.csdn.net/zhizhengguan/article/details/101070155

复制目录及其子目录、文件,到另外一个目录

/**
 * 复制一个目录及其子目录、文件到另外一个目录
 *
 * @param src
 * @param dest
 * @throws IOException
 */
private void copyFolder(File src, File dest) throws IOException {
    if (src.isDirectory()) {
        if (!dest.exists()) {
            dest.mkdir();
        }
        String files[] = src.list();
        for (String file : files) {
            File srcFile = new File(src, file);
            File destFile = new File(dest, file);
            // 递归复制
            copyFolder(srcFile, destFile);
        }
    } else {
        InputStream in = new FileInputStream(src);
        OutputStream out = new FileOutputStream(dest);

        byte[] buffer = new byte[1024];

        int length;

        while ((length = in.read(buffer)) > 0) {
            out.write(buffer, 0, length);
        }
        in.close();
        out.close();
    }
}

PS: apache commons-io包,FileUtils有相关的方法,IOUtils一般是拷贝文件。

删除目录结构 FileUtils.deleteDirectory(dest);
递归复制目录及文件 FileUtils.copyDirectory(src, dest);

java拷贝目录及其子目录、文件,到另外一个目录
https://blog.csdn.net/hardwin/article/details/7914610

相关文章

网友评论

      本文标题:后端小问题汇总

      本文链接:https://www.haomeiwen.com/subject/sfutjltx.html