// 获取私有构造方法示例
Class<User> userClass = User.class;
Constructor<User> privateCons = userClass.getDeclaredConstructor();
privateCons.setAccessible(true); // 突破访问限制
User user = privateCons.newInstance();
代码解析:
getDeclaredConstructor()
:获取类声明的所有构造方法(包括private)setAccessible(true)
:解除Java语言访问检查(需SecurityManager
允许)newInstance()
:通过反射创建新实例// 防御反射攻击的单例模式
public class SafeSingleton {
private static final SafeSingleton INSTANCE = new SafeSingleton();
private SafeSingleton() {
if (INSTANCE != null) {
throw new IllegalStateException("单例已被初始化");
}
}
}
// 泛型类构造方法示例
public class Box<T> {
private T content;
public Box(T content) {
this.content = content;
}
}
// 反射调用泛型构造
Constructor<Box> cons = Box.class.getConstructor(Object.class);
Box<String> stringBox = cons.newInstance("Hello");
代码解析:
Class
类型参数public <T> Box<T> createBox(Class<T> type, T content) {
Constructor<Box> cons = Box.class.getConstructor(Object.class);
return type.cast(cons.newInstance(content));
}
public abstract class Dao<T> {}
public class UserDao extends Dao<User> {}
// 获取泛型父类实际类型
Type genericSuper = UserDao.class.getGenericSuperclass();
if (genericSuper instanceof ParameterizedType) {
Type[] typeArgs = ((ParameterizedType) genericSuper).getActualTypeArguments();
Class<User> entityClass = (Class<User>) typeArgs[0]; // 得到User.class
}
代码解析:
getGenericSuperclass()
:获取包含泛型信息的父类类型ParameterizedType
:表示带有类型参数的泛型类型public static Set<Class<?>> getAllInterfaces(Class<?> clazz) {
Set<Class<?>> interfaces = new LinkedHashSet<>();
Class<?> current = clazz;
while (current != null) {
Collections.addAll(interfaces, current.getInterfaces());
current = current.getSuperclass();
}
return interfaces;
}
代码解析:
LinkedHashSet
:保持接口发现顺序,避免重复public class JdkProxyDemo {
public static void main(String[] args) {
List<String> list = (List<String>) Proxy.newProxyInstance(
List.class.getClassLoader(),
new Class<?>[]{List.class},
(proxy, method, args) -> {
System.out.println("调用方法:" + method.getName());
return method.invoke(new ArrayList<>(), args);
}
);
list.add("test"); // 输出:调用方法 add
}
}
代码解析:
InvocationHandler
:代理逻辑处理器Proxy
:代理类生成器$ProxyN
Proxy
类,实现目标接口public class CglibProxy implements MethodInterceptor {
public <T> T getProxy(Class<T> targetClass) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(targetClass);
enhancer.setCallback(this);
return (T) enhancer.create();
}
public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
System.out.println("Before: " + method.getName());
Object result = proxy.invokeSuper(obj, args);
System.out.println("After: " + method.getName());
return result;
}
}
代码解析:
操作 | JDK代理耗时 | CGLIB代理耗时 |
---|---|---|
代理类创建 | 150ms | 250ms |
方法调用(100万次) | 650ms | 320ms |
内存占用 | 低 | 较高 |
性能优化建议:
invoke
方法public class RpcProxy {
public static <T> T create(Class<T> interfaceClass) {
return (T) Proxy.newProxyInstance(
interfaceClass.getClassLoader(),
new Class<?>[]{interfaceClass},
(proxy, method, args) -> {
// 构造RPC请求
RpcRequest request = new RpcRequest(
interfaceClass.getName(),
method.getName(),
method.getParameterTypes(),
args
);
// 发送网络请求
return sendRequest(request);
}
);
}
}
架构解析:
public class ImmutablePoint {
private final int x;
private final int y;
public ImmutablePoint(int x, int y) {
this.x = x;
this.y = y;
validate();
}
private void validate() {
if (x < 0 || y < 0) {
throw new IllegalArgumentException("坐标不能为负");
}
}
}
// 不推荐
class Stack extends ArrayList {...}
// 推荐
class Stack {
private final List list = new ArrayList();
public void push(Object obj) { list.add(obj); }
public Object pop() { return list.remove(list.size()-1); }
}
public record User(String name, int age) {
// 紧凑构造方法
public User {
if (age < 0) throw new IllegalArgumentException("年龄不能为负");
}
}
革新特点:
ExecutorService vtExecutor = Executors.newVirtualThreadPerTaskExecutor();
UserService proxy = (UserService) Proxy.newProxyInstance(
UserService.class.getClassLoader(),
new Class[]{UserService.class},
(proxy, method, args) -> {
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
Future<Object> future = scope.fork(() -> method.invoke(target, args));
scope.join();
return future.resultNow();
}
});
技术结合优势:
通过深入掌握构造方法、继承关系和动态代理三大核心特性,开发者可以:
灵活控制对象生命周期:
设计优雅的类层次结构:
实现系统级扩展功能:
未来发展方向:
掌握这些技术精髓,结合具体业务场景合理应用,将显著提升Java系统的灵活性、可维护性和扩展性。