ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

БвязываниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². 
ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Java Beans

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Dynamic Proxy Class API ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ — пСрСчислСнии BeanBindingManager. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π΅Π³ΠΎ исходный ΠΊΠΎΠ΄. New BeanInvocationHandler (targetGroup.getTargetObject (), targetGroup. getTargetMethod (), eventGroup. getEventMethod ())); Public Object invoke (Object proxy, Method method, Object args) throws Throwable {. Catch (IllegalAccessException — InvocationTargetException e) {. Method… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

БвязываниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Java Beans (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

BeanInvocationHandler

Как Π±Ρ‹Π»ΠΎ сказано Ρ€Π°Π½Π΅Π΅, для создания Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ интСрфСйса ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ Π±Ρ‹Π» использован Java Dynamic Proxy Class API, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ динамичСски ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйсов. Π‘Π½Π°Ρ‡Π°Π»Π° Π±Ρ‹Π»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс InvocationHandler, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ интСрфСйса. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ исходный ΠΊΠΎΠ΄ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса.

public Object invoke (Object proxy, Method method, Object[] args) throws Throwable {.

Object result = null;

if (method.equals (eventMethod)) {.

result = targetMethod. invoke (target, null);

}.

return result;

}.

}.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса BeanInvocationHandler ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ 3 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ наступлСнии события, ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ интСрфСйса ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ — источник ΠΏΡ€ΠΈ наступлСнии события (это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ интСрфСйс ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²).

BeanBindingManager

Dynamic Proxy Class API ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ — пСрСчислСнии BeanBindingManager. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π΅Π³ΠΎ исходный ΠΊΠΎΠ΄.

public enum BeanBindingManager {.

INSTANCE ();

private EventBindingGroup eventGroup;

public void setEventGroup (EventBindingGroup eventGroup) {.

this.eventGroup = eventGroup;

}.

public void bind (TargetBindingGroup targetGroup) {.

if (eventGroup == null) return;

Method listenerMethod = eventGroup. getAddListenerMethod ();

Object proxy = Proxy. newProxyInstance (.

getClass ().getClassLoader (),.

new Class[]{listenerMethod.getParameterTypes ()[0]},.

new BeanInvocationHandler (targetGroup.getTargetObject (), targetGroup. getTargetMethod (), eventGroup. getEventMethod ()));

try {.

listenerMethod.invoke (eventGroup.getEventSource (), proxy);

} catch (IllegalAccessException | InvocationTargetException e) {.

e.printStackTrace ();

}.

eventGroup = null;

}.

public boolean isChoosingTarget () {.

return eventGroup ≠ null;

}.

public void cancelBinding () {.

eventGroup = null;

}.

}.

Для Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ связывания ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π±Ρ‹Π»ΠΎ создано Π΄Π²Π° класса: EventBindingGroup, содСрТащий ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ — источник событий, ссылку Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° ΡΠΎΠ±Ρ‹Ρ‚ия, ΠΈ ΡΡΡ‹Π»ΠΊΡƒ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ интСрфСйса ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ источником ΠΏΡ€ΠΈ наступлСнии события, ΠΈ TargetBindingGroup, содСрТащий ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ ΠΏΡ€ΠΈ наступлСнии события, ΠΈ ΡΡΡ‹Π»ΠΊΡƒ Π½Π° ΡΠ°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄. Класс BeanBindingManager Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктирования «ΠžΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ°», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π±Ρ‹Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ BeanBindingManager. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС отсутствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ связывании ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈΠ·-Π·Π° использования Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΉ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ BeanBindingManager.

Π¨Π°Π±Π»ΠΎΠ½ ΠžΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ° Π² Java

«Π¨Π°Π±Π»ΠΎΠ½ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠ»Π°ΡΡΠ° Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр, ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚авляСт ΠΊ Π½Π΅ΠΌΡƒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ доступа.» [16]. БущСствуСт нСсколько способов Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠΈ Π² java, ΠΎΠ΄Π½Π°ΠΊΠΎ, начиная с Π²Π΅Ρ€ΡΠΈΠΈ 1.5, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ появились классы — пСрСчислСния, Π»ΡƒΡ‡ΡˆΠΈΠΌ способом являСтся использованиС класса — пСрСчислСния.

public enum Elvis {.

INSTANCE;

public void leaveTheBuilding () {…}.

Помимо простоты ΠΈ ΠΊΡ€Π°Ρ‚кости Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ обСспСчиваСт ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сСриализации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠΈ.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ