zoukankan      html  css  js  c++  java
  • Java通过反射破解单例模式和防止反射破解单例模式案例

    一.通过反射破解和防止反射破解单例模式案例

     1 public class User {
     2 
     3     private String userName;
     4     private static User user;
     5 
     6     public String getUserName() {
     7         return userName;
     8     }
     9 
    10     public void setUserName(String userName) {
    11         this.userName = userName;
    12     }
    13 
    14     private User(String userName) {
    15 
    16         // 2.这句话用于防止通过反射的方式调用该构造器创建对象
    17         if (user != null) {
    18             throw new RuntimeException("非法创建对象!");
    19         }
    20         this.userName = userName;
    21     }
    22 
    23     public static User getInstance(String userName) {
    24         if (user == null) {
    25             user = new User(userName);
    26         }
    27         return user;
    28     }
    29 }
    30 
    31 class MyTest {
    32 
    33     public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
    34         //1.通过反射破解单例模式
    35         User user = User.getInstance("王");
    36         System.out.println(user.getUserName());
    37 
    38         Class c1 = Class.forName("ustc.wzh.User");
    39         Constructor<User> constructor = User.class.getDeclaredConstructor(String.class);
    40         constructor.setAccessible(true);
    41         User user1 = constructor.newInstance("张");
    42 
    43         System.out.println(user1.getUserName());
    44         System.out.println(user.getUserName());
    45     }
    46 }
  • 相关阅读:
    lucene中创建索引库
    商城后台上架商品列表查询的书写全过程
    Linux命令英文全称
    商品品牌分页、过滤、排序查询的完成流程
    axios使用步骤详解(附代码)
    使用CORS处理跨域请求
    npm 是干什么的?
    Mybatis通用Mapper介绍和使用
    FastDFS的理解和分析
    CDN服务的含义
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12326702.html
Copyright © 2011-2022 走看看