0 0

Hibernate运用反射机制的困惑5

我一直觉得Hibernate在做数据库查询的时候,是运用JAVA反射机制创建POJO对象,然后运用POJO的SET()方法把POJO的各个属性值设为数据库查询返回所对应的值,最后返回这个对象。但是为什么我把POJO的setId()方法设为private,然后做数据库查询的时候,Hibernate仍可以返回这个POJO的ID属性值的?它是在调用private的setId()方法吗?是不是Hibernate在动态代理中做了手脚啊?
以下是我的POJO类代码:
public class Student {
    private int student_id;
    private String student_name;
    private int student_age;
    
    public int getStudent_id()
    {
        return student_id;
    }
    public String getStudent_name()
    {
        return student_name;
    }
    public int getStudent_age()
    {
        return student_age;
    }
    private void setStudent_id(int id)
    {
        this.student_id = id;
    }
    public void setStudent_name(String name)
    {
        this.student_name = name;
    }
    public void setStudent_age(int age)
    {
        this.student_age = age;
    } 
}

问题补充:
是的public Field[] getDeclaredFields()可以找出类的所有成员变量,包括私有变量。但是它不能将私有变量赋值,否则违反了java的封装。Hibernate通过什么方法可以把私有成员变量赋值成数据库查询到的值然后返回POJO对象呢?动态代理?
2009年7月11日 17:17

4个答案 按时间排序 按投票排序

0 0

采纳的答案

但是它不能将私有变量赋值,否则违反了java的封装


谁告诉你它不能将私有变量赋值??

setAccessible
public void setAccessible(boolean flag)
                   throws SecurityException将此对象的 accessible 标志设置为指示的布尔值。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。

2009年7月11日 21:50
0 0


反射机制

不受 private public等可见修饰符的影响。

反射机制 java的一大特性。抛开业务开发。
在开发工具性质的代码中,一定会用到。

2009年7月12日 01:11
0 0

给你看个例子吧

import java.lang.reflect.Field;


public class ReflectTest {

	/**
	 * @param args
	 * @throws NoSuchFieldException 
	 * @throws SecurityException 
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		try {
			PrivateClass p= new PrivateClass();
			Field i = PrivateClass.class.getDeclaredField("i");
			Field j = PrivateClass.class.getDeclaredField("j");
			
			i.setAccessible(true);
			i.setInt(p, 1);
			
			j.setAccessible(true);
			j.setInt(p, 2);
			
			System.out.println(p);
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

}

class PrivateClass
{
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "i=" + i + ",j=" + j;
	}
	private int i;
	private int j;
	
	
}

2009年7月11日 21:58
0 0

反射可以用方法也可以用字段的反射

Class

getDeclaredFields
public Field[] getDeclaredFields()
                          throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。



Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。

2009年7月11日 17:20

相关推荐

    hibernate 反射原理

    标题:Hibernate反射原理 描述:本文章旨在深入探讨Java与Hibernate框架结合时所涉及的反射原理,通过解析Java反射机制的基础知识,理解Hibernate如何利用反射技术实现对象关系映射(ORM)。 ### Java反射原理概览...

    hibernate事务管理机制.doc

    【hibernate事务管理机制】是指在使用Hibernate框架进行数据库操作时,如何管理和协调事务的一系列规则和策略。事务管理是确保数据一致性、完整性和并发控制的重要机制。 **悲观锁**是预防性的锁定策略,它假设并发...

    详解Hibernate事务处理机制

    本文将深入探讨Hibernate中的事务处理机制,并通过具体示例帮助读者更好地理解和运用。 #### 二、Hibernate事务处理基础 ##### 2.1 事务概念 在数据库操作中,事务是指一系列操作作为一个完整的单元来执行。这些...

    HIBERNATE的缓存机制

    Hibernate缓存机制是提高应用程序性能的关键特性,尤其是在频繁与数据库交互的应用中。缓存通过减少对物理数据库的直接访问次数,显著提升了数据读取和写入的速度。这主要是因为从缓存中读取数据比从数据库中获取更...

    java反射机制讲解

    Java反射机制是Java语言提供的一种强大的能力,它允许我们在运行时检查类的信息并动态地创建和操作对象。这种机制使得程序具有更高的灵活性和...总的来说,理解并熟练运用Java反射机制是提升Java编程技能的关键一步。

    浅论泛型与反射机制结合(hibernate)

    在Java编程语言中,泛型和反射机制是两个非常重要的概念,它们各自有着独特的作用,同时在特定场景下,如Hibernate框架中,两者的结合能够实现更强大的功能。本篇文章将深入探讨泛型与反射机制的基本概念,以及它们...

    java反射机制原理

    Java反射机制是Java编程语言中的一个核心特性,...通过深入理解和合理运用反射机制,开发者可以解决许多复杂问题,提高代码的灵活性和可维护性。在实际编程中,我们需要权衡其优势和潜在的缺点,合理选择是否使用反射。

    通过类反射机制实现底层数据库连接

    在数据库连接中,反射机制被广泛应用,特别是在ORM(Object-Relational Mapping)框架如Hibernate中,它帮助我们实现了对底层数据库的操作。 Hibernate是一个流行的Java ORM框架,它的核心功能是将Java对象映射到...

    Java反射机制学习(二)

    在Java编程语言中,反射机制是一项强大的工具,它允许程序在运行时检查并操作类、接口、字段和方法的信息。这篇博文"Java反射机制学习(二)"可能...通过阅读这两份代码,读者可以更好地理解和掌握Java反射的实践运用。

    hibernate的flush机制

    ### Hibernate的Flush机制详解 #### 引言 Hibernate作为Java领域中最流行的ORM(Object-Relational Mapping)框架之一,极大地简化了数据访问层的开发工作,使得开发者能够更专注于业务逻辑而非底层的数据交互细节...

    java反射机制,很安逸.不要错过

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息,打破了...总的来说,Java反射机制是一把双刃剑,正确运用可以显著提升代码的灵活性,但也需注意其潜在的问题。

    java反射机制详解与应用.pdf

    * 实现动态代理:Java 反射机制可以用来实现动态代理,例如在 Hibernate 框架中。 Java 反射机制的主要方法包括: * getClass():获取当前对象的 Class 对象。 * Class.forName():获取指定名称的 Class 对象。 * ...

    仿照jpa/Hibernate通过反射导入Excel

    在本场景中,“仿照jpa/Hibernate通过反射导入Excel”指的是利用反射机制来实现类似JPA或Hibernate的数据导入功能,将Excel文件中的数据转换为Java对象并存储到数据库中。 首先,我们需要理解JPA和Hibernate。JPA是...

    java 反射机制例子

    2. **框架开发**:许多Java框架,如Spring、Hibernate等,大量使用了反射机制来实现自动装配、依赖注入等功能。 3. **单元测试**:在单元测试中,反射常被用来模拟私有方法的行为或直接设置私有字段的值。 4. **插件...

    Java 1.5 反射机制

    Java 1.5引入的反射机制是其动态性的一个重要体现,它允许程序在运行时检查和操作类、接口、对象及其方法。反射为开发者提供了强大的...在理解和掌握反射机制的同时,也要注意其可能带来的问题,合理地在项目中运用。

    Java反射机制-PDF文档,详述了反射机制的原理和使用方法

    - 数据库持久层框架:如Hibernate,使用反射来映射数据库表与Java对象之间的关系。 - 测试工具:JUnit等测试框架利用反射来调用私有方法或修改私有字段。 - AOP(面向切面编程):Spring框架通过反射实现切面的动态...

    JAVA 反射机制应用

    Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。...在实际开发中,合理运用反射可以大大提高代码的灵活性,但也要注意其可能带来的负面影响。

Global site tag (gtag.js) - Google Analytics