2013-04-03 5 views
2

Мне было интересно, как Mybatis получает частную переменную в Java.Как Mybatis (iBatis) читает мою приватную переменную?

Например:

Допустим, у нас есть класс Java с именем Foo:

public class Foo{ 
    private int foolID; 

    public Foo(int foolID){ 
    this.foolID = foolID; 
    } 
} 

И давайте создадим XML Mapper для вставки.

<insert id="insert" parameterType="Foo"> 
    insert into foo_table (id) 
    values (#{foolID}); 
</insert> 

Предположим, что для этой вставки есть java-класс FooDAO и интерфейс fooMapper java.

Мой вопрос в том, как сделать foolID доступным для чтения даже без Getter (Даже если есть метод getter для foolID, я никогда не укажу, что такое геттер ...). Мне кажется, что это волшебство, и я знаю, что для программирования нет магии ... :)

Единственный способ, которым я могу думать, это отражение.

Спасибо за вашу помощь заранее.

ответ

1

Правильно, отражение используется для доступа к закрытым полям, но только если доступ к закрытым полям не ограничен. Швы, подобные отражению, используются не только для доступа к закрытым полям, но и для создания сеттерных геттеров и т. Д.

+0

Другой вопрос, что вы подразумеваете под «только при доступе к закрытым полям». Как ограничить частные поля? – Xin

+0

Вы можете включить [диспетчер безопасности] (http://docs.oracle.com/javase/tutorial/essential/environment/security.html) и настроить его на вас [GlassFish] (https://weblogs.java. net/blog/felipegaucho/archive/2010/01/02/glassfish-securitymanagercheckpermission) сервер, чтобы ограничить отражение. –

Смежные вопросы