Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Java´úÀí»úÖÆ
 
À´Ô´£ºblog.csdn.net ·¢²¼ÓÚ 2017-1-23
  2129  次浏览      27
 

1ÒýÑÔ

ÎÒÃÇÊéдִÐÐÒ»¸ö¹¦Äܵĺ¯Êýʱ£¬¾­³£ÐèÒªÔÚÆäÖÐдÈëÓ빦Äܲ»ÊÇÖ±½ÓÏà¹Øµ«ºÜÓбØÒªµÄ´ú Â룬ÈçÈÕÖ¾¼Ç¼£¬ÐÅÏ¢·¢ËÍ£¬°²È«ºÍÊÂÎñÖ§³ÖµÈ£¬ÕâЩ֦½ÚÐÔ´úÂëËäÈ»ÊDZØÒªµÄ£¬µ«Ëü»á´ø À´ÒÔÏÂÂé·³£º

Ö¦½ÚÐÔ´úÂëÓÎÀëÔÚ¹¦ÄÜÐÔ´úÂëÖ®Í⣬ËüÏÂÊǺ¯ÊýµÄÄ¿µÄ£¬ÕâÊǶÔOOÊÇÒ»ÖÖÆÆ»µ

Ö¦½ÚÐÔ´úÂë»áÔì³É¹¦ÄÜÐÔ´úÂë¶ÔÆäËüÀàµÄÒÀÀµ£¬¼ÓÉîÀàÖ®¼äµÄñîºÏ£¬¶øÕâÊÇOOϵͳËù½ß Á¦±ÜÃâµÄ

Ö¦½ÚÐÔ´úÂë´øÀ´µÄñîºÏ¶È»áÔì³É¹¦ÄÜÐÔ´úÂëÒÆÖ²À§ÄÑ£¬¿ÉÖØÓÃÐÔ½µµÍ

´Ó·¨ÀíÉÏ˵£¬Ö¦½ÚÐÔ´úÂëÓ¦¸Ã`¼àÊÓ'׏¦ÄÜÐÔ´úÂ룬Ȼºó²ÉÈ¡Ðж¯£¬¶ø²»Êǹ¦ÄÜÐÔ´úÂë `֪ͨ'Ö¦½ÚÐÔ´úÂë²ÉÈ¡Ðж¯£¬ÕâºÃ±ÈÒ÷ÓÎÊ«ÈËÓ¦¸ÃÊÇÖ÷¶¯¼Ç¼ÆïÊ¿µÄ¹¦¼¨¶ø²»ÊÇÆïÊ¿Ö÷ ¶¯ÒªÇóÊ«È˼Ǽ×Ô¼ºµÄ¹¦¼¨

2 ³£¼ûµÄ´úÀí

ºÁÎÞÒÉÎÊ£¬Ö¦½ÚÐÔ´úÂëºÍ¹¦ÄÜÐÔ´úÂëÐèÒª·Ö¿ªÀ´²ÅÄܽµµÍñîºÏ³Ì¶È£¬·ûºÏÏÖ´úOOϵͳµÄÒª Çó£¬ÎÒÃÇ¿ÉÒÔʹÓôúÀíģʽÍê³ÉÕâ¸öÒªÇó¡£

´úÀíģʽµÄ×÷ÓÃÊÇ£ºÎªÆäËü¶ÔÏóÌṩһÖÖ´úÀíÒÔ¿ØÖƶÔÕâ¸ö¶ÔÏóµÄ·ÃÎÊ¡£ÔÚijЩÇé¿öÏ£¬Ò» ¸ö¿Í»§²»ÏëÖ±½ÓÒýÓÃÁíÒ»¸ö¶ÔÏ󣬶ø´úÀí¶ÔÏó¿ÉÒÔÔÚ¿Í»§¶ËºÍÄ¿±ê¶ÔÏóÖ®¼äÆðµ½Öнé×÷Óᣠ´úÀíģʽһ°ãÉæ¼°µ½Èý¸ö½ÇÉ«£º

³éÏó½ÇÉ«£ºÉùÃ÷ÕæÊµ¶ÔÏóºÍ´úÀí¶ÔÏóµÄ¹²Í¬½Ó¿Ú

´úÀí½ÇÉ«£º´úÀí¶ÔÏóÄÚ²¿°üº¬ÓÐÕæÊµ½ÇÉ«µÄÒýÓ㬴Ӷø¿ÉÒÔ²Ù×÷ÕæÊµ½ÇÉ«£¬Í¬Ê±´úÀí¶ÔÏó ÓëÕæÊµ¶ÔÏóÓÐÏàͬµÄ½Ó¿Ú£¬ÄÜÔÚÈκÎʱºò´úÌæÕæÊµ¶ÔÏó£¬Í¬Ê±´úÀí¶ÔÏó¿ÉÒÔÔÚÖ´ÐÐÕæÊµ¶Ô Ïóǰºó¼ÓÈëÌØ¶¨µÄÂß¼­ÒÔʵÏÖ¹¦ÄܵÄÀ©Õ¹¡£

ÕæÊµ½ÇÉ«£º´úÀí½ÇÉ«Ëù´ú±íµÄÕæÊµ¶ÔÏó£¬ÊÇÎÒÃÇ×îÖÕÒªÒýÓõĶÔÏó

³£¼ûµÄ´úÀíÓÐ:

Ô¶³Ì´úÀí(Remote Proxy)£º¶ÔÒ»¸öλÓÚ²»Í¬µÄµØÖ·¿Õ¼ä¶ÔÏóÌṩһ¸ö¾ÖÓò´ú±í¶ÔÏó£¬ÈçRMIÖеÄstub

ÐéÄâ´úÀí(Virtual Proxy)£º¸ù¾ÝÐèÒª½«Ò»¸ö×ÊÔ´ÏûºÄºÜ´ó»òÕ߱Ƚϸ´ÔӵĶÔÏó£¬ÑÓ³Ù¼Ó ÔØ£¬ÔÚÕæÕýÐèÒªµÄʱºò²Å´´½¨

±£»¤´úÀí(Protect or Access Proxy)£º¿ØÖƶÔÒ»¸ö¶ÔÏóµÄ·ÃÎÊȨÏÞ¡£

ÖÇÄÜÒýÓÃ(Smart Reference Proxy)£ºÌṩ±ÈÄ¿±ê¶ÔÏó¶îÍâµÄ·þÎñºÍ¹¦ÄÜ¡£

ͨ¹ý´úÀíÀàÕâÒ»Öмä²ã£¬Äܹ»ÓÐЧ¿ØÖƶÔʵ¼ÊίÍÐÀà¶ÔÏóµÄÖ±½Ó·ÃÎÊ£¬Ò²¿ÉÒԺܺõØÒþ²ØºÍ ±£»¤Êµ¼Ê¶ÔÏó£¬ÊµÊ©²»Í¬µÄ¿ØÖƲßÂÔ£¬´Ó¶øÔÚÉè¼ÆÉÏ»ñµÃÁ˸ü´óµÄÁé»îÐÔ¡£

3 ´úÀíģʽUMLͼ

´úÀíÊÇÒ»ÖÖ³£ÓõÄÉè¼ÆÄ£Ê½£¬ÆäÄ¿µÄ¾ÍÊÇΪÆäËû¶ÔÏóÌṩһ¸ö´úÀíÒÔ¿ØÖƶÔij¸ö¶ÔÏóµÄ·ÃÎÊ¡£ ´úÀíÀฺÔðΪίÍÐÀàÔ¤´¦ÀíÏûÏ¢£¬¹ýÂËÏûÏ¢²¢×ª·¢ÏûÏ¢£¬ÒÔ¼°½øÐÐÏûÏ¢±»Î¯ÍÐÀàÖ´ÐкóµÄºó Ðø´¦Àí¡£

4 ´úÀíģʽʵÀý

ÒÔÏÂÒÔ¡¶JavaÓëģʽ¡·ÖеÄʾÀýΪÀý£º

// ³éÏó½ÇÉ«£º
abstract public class Subject {
abstract public void request();
}

// ÕæÊµ½ÇÉ«£ºÊµÏÖÁËSubjectµÄrequest()·½·¨
public class RealSubject extends Subject {
public RealSubject() { }

public void request() {
System.out.println( " From real subject. " );
}
}

// ´úÀí½ÇÉ«£º
public class ProxySubject extends Subject {
// ÒÔÕæÊµ½ÇÉ«×÷Ϊ´úÀí½ÇÉ«µÄÊôÐÔ
private Subject realSubject;

public ProxySubject(Subject realSubject) {this.realSubject = realSubject }

// ¸Ã·½·¨·â×°ÁËÕæÊµ¶ÔÏóµÄrequest·½·¨
public void request() {
preRequest();
realSubject.request(); // ´Ë´¦Ö´ÐÐÕæÊµ¶ÔÏóµÄrequest·½·¨
postRequest();
}
...
}

// ¿Í»§¶Ëµ÷Óãº
RealSubject real = new RealSubject();
Subject sub = new ProxySubject(real);
Sub.request();

ÓÉÒÔÉÏ´úÂë¿ÉÒÔ¿´³ö£¬¿Í»§Êµ¼ÊÐèÒªµ÷ÓõÄÊÇRealSubjectÀàµÄrequest()·½·¨£¬ÏÖÔÚÓà ProxySubjectÀ´´úÀí RealSubjectÀ࣬ͬÑù´ïµ½Ä¿µÄ£¬Í¬Ê±»¹·â×°ÁËÆäËû·½·¨ (preRequest(),postRequest())£¬¿ÉÒÔ´¦ÀíһЩÆäËûÎÊÌâ¡£

ÁíÍ⣬Èç¹ûÒª°´ÕÕÉÏÊöµÄ·½·¨Ê¹ÓôúÀíģʽ£¬ÄÇÃ´ÕæÊµ½ÇÉ«±ØÐëÊÇÊÂÏÈÒѾ­´æÔڵ쬲¢½«Æä ×÷Ϊ´úÀí¶ÔÏóµÄÄÚ²¿ÊôÐÔ¡£µ«ÊÇʵ¼ÊʹÓÃʱ£¬Èç¹ûijһ¸ö´úÀíÒªÓ¦ÓÃÓÚ£­ÅúÕæÊµ½ÇÉ«£¬š°¸ö ÕæÊµ¶ÔÏó±ØÐë¶ÔÓ¦Ò»¸ö´úÀí½ÇÉ«£¬Èç¹û´óÁ¿Ê¹ÓûᵼÖÂÀàµÄ¼±¾çÅòÕÍ£»´ËÍ⣬Èç¹ûÊÂÏȲ¢²» ÖªµÀÕæÊµ½ÇÉ«£¬¸ÃÈçºÎʹÓñàд´úÀíÀàÄØ£¿Õâ¸öÎÊÌâ¿ÉÒÔͨ¹ýjavaµÄ¶¯Ì¬´úÀíÀàÀ´½â¾ö¡£

5 java¶¯Ì¬´úÀí

ËùνDynamic ProxyÊÇÕâÑùÒ»ÖÖclass£ºËüÊÇÔÚÔËÐÐʱÉú³ÉµÄclass£¬ÔÚÉú³ÉËüʱÄã±ØÐëÌṩһ ×éinterface¸øËü£¬È»ºó¸Ãclass¾ÍÐû³ÆËüʵÏÖÁËÕâЩ interface¡£Ä㵱Ȼ¿ÉÒ԰ѸÃclassµÄʵ Àýµ±×÷ÕâЩinterfaceÖеÄÈκÎÒ»¸öÀ´Óᣵ±È»À²£¬Õâ¸öDynamic ProxyÆäʵ¾ÍÊÇÒ»¸öProxy£¬ Ëü²»»áÌæÄã×÷ʵÖÊÐԵŤ×÷£¬ÔÚÉú³ÉËüµÄʵÀýʱÄã±ØÐëÌṩһ¸öhandler£¬ÓÉËü½Ó¹Üʵ¼ÊµÄ¹¤ ×÷¡£

5.1 java¶¯Ì¬´úÀíUMLͼ

java¶¯Ì¬´úÀíÀàλÓÚjava.lang.reflect°üÏ£¬Ò»°ãÖ÷񻃾¼°µ½ÒÔÏÂÁ½¸öÀࣺ

Interface InvocationHandler£º¸Ã½Ó¿ÚÖнö¶¨ÒåÁËÒ»¸ö·½·¨Object£ºinvoke(Object obj,Method method, Object[] args)¡£ÔÚʵ¼ÊʹÓÃʱ£¬µÚÒ»¸ö²ÎÊýobjÒ»°ãÊÇÖ¸´úÀí À࣬methodÊDZ»´úÀíµÄ·½·¨£¬ÈçÉÏÀýÖеÄrequest()£¬argsΪ¸Ã·½·¨µÄ²ÎÊýÊý×é¡£ Õâ¸ö³é Ïó·½·¨ÔÚ´úÀíÀàÖж¯Ì¬ÊµÏÖ¡£

Proxy£º¸ÃÀ༴Ϊ¶¯Ì¬´úÀíÀ࣬×÷ÓÃÀàËÆÓÚÉÏÀýÖеÄProxySubject¡£

Protected Proxy(InvocationHandler h)£º¹¹Ô캯Êý£¬¹À¼ÆÓÃÓÚ¸øÄÚ²¿µÄh¸³Öµ¡£

Static Class getProxyClass (ClassLoader loader, Class[] interfaces)£º»ñµÃÒ»¸ö ´úÀíÀ࣬ÆäÖÐloaderÊÇÀà×°ÔØÆ÷£¬interfacesÊÇÕæÊµÀàËùÓµÓеÄÈ«²¿½Ó¿ÚµÄÊý×é¡£

Static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)£º·µ»Ø´úÀíÀàµÄÒ»¸öʵÀý£¬·µ»ØºóµÄ´úÀíÀà¿ÉÒÔµ±×÷±»´úÀíÀàʹÓà (¿ÉʹÓñ»´úÀíÀàµÄÔÚSubject½Ó¿ÚÖÐÉùÃ÷¹ýµÄ·½·¨)¡£

ÔÚʹÓö¯Ì¬´úÀíÀàʱ£¬ÎÒÃDZØÐëʵÏÖInvocationHandler½Ó¿Ú£¬ÒÔµÚÒ»½ÚÖеÄʾÀýΪÀý£º

// ³éÏó½ÇÉ«(֮ǰÊdzéÏóÀ࣬´Ë´¦Ó¦¸ÄΪ½Ó¿Ú)£º
public interface Subject {
abstract public void request();
}

// ¾ßÌå½ÇÉ«RealSubject£º
public class RealSubject implements Subject {
public RealSubject() {}

public void request() {
System.out.println( " From real subject. " );
}

}

// ´úÀí´¦ÀíÆ÷£º
import java.lang.reflect.Method;
import java.lang.reflect.InvocationHandler;

public class DynamicSubject implements InvocationHandler {
private Object sub;
public DynamicSubject() {}

public DynamicSubject(Object obj) {
sub = obj;
}

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println( " before calling " + method);
method.invoke(sub,args);

System.out.println( " after calling " + method);
return null ;
}
}

¸Ã´úÀíÀàµÄÄÚ²¿ÊôÐÔΪObjectÀ࣬ʵ¼ÊʹÓÃʱͨ¹ý¸ÃÀàµÄ¹¹Ô캯ÊýDynamicSubject(Object obj)¶ÔÆä¸³Öµ£»´ËÍ⣬ÔÚ¸ÃÀ໹ʵÏÖÁËinvoke·½·¨£¬¸Ã·½·¨ÖеÄ

method.invoke(sub,args);

Æäʵ¾ÍÊǵ÷Óñ»´úÀí¶ÔÏóµÄ½«Òª±»Ö´Ðеķ½·¨£¬·½·¨²ÎÊýsubÊÇʵ¼ÊµÄ±»´úÀí¶ÔÏó£¬argsΪִ Ðб»´úÀí¶ÔÏóÏàÓ¦²Ù×÷ËùÐèµÄ²ÎÊý¡£Í¨¹ý¶¯Ì¬´úÀíÀ࣬ÎÒÃÇ¿ÉÒÔÔÚµ÷ÓÃ֮ǰ»òÖ®ºóÖ´ÐÐһЩ Ïà¹Ø²Ù×÷¡£

// ¿Í»§¶Ë£º
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class Client {

static public void main(String[] args) throws Throwable {
RealSubject rs = new RealSubject(); // ÔÚÕâÀïÖ¸¶¨±»´úÀíÀà
InvocationHandler ds = new DynamicSubject(rs);
Class cls = rs.getClass();

// ÒÔÏÂÊÇÒ»´ÎÐÔÉú³É´úÀí
Subject subject = (Subject) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(),ds );
subject.request();
}
}

// ³ÌÐòÔËÐнá¹û£º
before calling public abstract void Subject.request()
From real subject.
after calling public abstract void Subject.request()

ͨ¹ýÕâÖÖ·½Ê½£¬±»´úÀíµÄ¶ÔÏó(RealSubject)¿ÉÒÔÔÚÔËÐÐʱ¶¯Ì¬¸Ä±ä£¬ÐèÒª¿ØÖÆµÄ½Ó¿Ú (Subject½Ó¿Ú)¿ÉÒÔÔÚÔËÐÐʱ¸Ä±ä£¬¿ØÖƵķ½Ê½(DynamicSubjectÀà)Ò²¿ÉÒÔ¶¯Ì¬¸Ä±ä£¬´Ó¶øÊµ ÏÖÁ˷dz£Áé»îµÄ¶¯Ì¬´úÀí¹ØÏµ¡£

6 ´úÀíģʽÓë×°ÊÎÕßģʽµÄÇø±ð

´úÀíģʽºÍ×°ÊÎÕßģʽºÜÏñ£¬ÔÚµäÐ͵ÄÀý×ÓÉÏ£¬ÈçspringµÄAOP¡¢Ô¶³Ì´úÀíÀà¡¢JDKµÄproxy£¬ ¶¼ÊÇ´úÀíģʽ¡£JDKÀïµÄÊäÈë/Êä³öÆ÷ÊǺܵäÐ͵Ä×°ÊÎÆ÷ģʽ£¡µ«ÔÚÓÐЩ³¡¾°ÉÏ£¬¶ÔÉè¼ÆÄ£Ê½ ÈëÃŵÄÐÂÊÖ£¬»¹ÊÇÓеãÄÑÇø·Ö£¬UMLÀàͼ»ù±¾Ã»Çø±ð£¬¶¼ÊÇʵÏÖͬһ¸ö½Ó¿Ú£¬Ò»¸öÀà°ü×°ÁíÒ» ¸öÀà¡£ Á½Õߵ͍Ò壺

×°ÊÎÆ÷ģʽ£ºÄܶ¯Ì¬µÄÐÂÔö»ò×éºÏ¶ÔÏóµÄÐÐΪ

´úÀíģʽ£ºÎªÆäËû¶ÔÏóÌṩһÖÖ´úÀíÒÔ¿ØÖƶÔÕâ¸ö¶ÔÏóµÄ·ÃÎÊ

×°ÊÎģʽÊÇ¡°ÐÂÔöÐÐΪ¡±£¬¶ø´úÀíģʽÊÇ¡°¿ØÖÆ·ÃÎÊ¡±¡£¹Ø¼ü¾ÍÊÇÎÒÃÇÈçºÎÅжÏÊÇ¡°ÐÂÔöÐРΪ¡±»¹ÊÇ¡°¿ØÖÆ·ÃÎÊ¡±¡£ÄãÔÚÒ»¸öµØ·½Ð´×°ÊΣ¬´ó¼Ò¾ÍÖªµÀÕâÊÇÔÚÔö¼Ó¹¦ÄÜ£¬Äãд´úÀí£¬´ó ¼Ò¾ÍÖªµÀÊÇÔÚÏÞÖÆ¡£

6.1 ×°ÊÎÕßģʽUMLͼ

ÆäÖÐÀàµÄÖ°ÔðÈçÏ£º

³éÏó¹¹¼þ½ÇÉ«£¨Project£©£º¸ø³öÒ»¸ö½Ó¿Ú£¬ÒԹ淶׼±¸½ÓÊÕ¸½¼ÓÔðÈεĶÔÏó

¾ßÌå¹¹¼þ½ÇÉ«£¨Employe£©£º¶¨ÒåÒ»¸ö½«Òª½ÓÊÕ¸½¼ÓÔðÈεÄÀà

×°ÊνÇÉ«£¨Manager£©£º³ÖÓÐÒ»¸ö¹¹¼þ¶ÔÏóµÄʵÀý£¬²¢¶¨ÒåÒ»¸öÓë³éÏó¹¹¼þ½Ó¿ÚÒ»ÖµĽӿÚ

¾ßÌå×°ÊνÇÉ«£¨ManagerA¡¢ManagerB£©£º¸ºÔð¸ø¹¹¼þ¶ÔÏó¡°ÌùÉÏ¡±¸½¼ÓµÄÔðÈÎ

6.2 ÐÎÏó˵Ã÷

´úÀíģʽ£ºÔÚ²»¸Ä±ä½Ó¿ÚµÄǰÌáÏ£¬¿ØÖƶÔÏóµÄ·ÃÎÊ

Àý×Ó£ºËïÎò¿Õ°çÑݲ¢´úÌæ¸ß¼ÒÈýС½ã

ËïÎò¿Õ°çÑݸ߼ÒÈýС½ã£¬ËùÒÔ¿ÉÒÔ˵ËïÎò¿ÕÓë¸ß¼ÒÈýС½ã¾ßÓй²Í¬µÄ½Ó¿Ú¡£Èç¹ûÖí°Ë½äÖ»Ïë ¼û¼û¸ß¼ÒÈýС½ãµÄ½¿ºÃÃæÈÝ£¬»òÕß̸̸Ìì˵˵µØ£¬ÄÇô¸ß¼ÒÈýС½ãµÄ¡°´úÀí¡±ËïÎò¿ÕÊÇÔÊÐí µÄ£¬µ«Öí°Ë½äÏëÇ×Ç××죬ÄÇôÊDz»Ðеġ£ÕâÊDZ£»¤´úÀíģʽµÄÓ¦Óá£Ö»ÓдúÀí¶ÔÏóÈÏΪºÏÊÊ Ê±£¬²Å»á½«¿Í»§¶ËµÄÇëÇ󴫵ݸøÕæÊµÖ÷Ìâ¶ÔÏó¡£

×°ÊÎģʽ£ºÔÚ²»¸Ä±ä½Ó¿ÚµÄǰÌáÏ£¬¶¯Ì¬À©Õ¹¶ÔÏóµÄ¹¦ÄÜ

ËïÎò¿ÕÓÐÆßÊ®¶þ°ã±ä»¯£¬ÔÚ¶þÀÉÉñÑÛÀËûÓÀÔ¶ÊÇÄÇÖ»â©áø¡£×°ÊÎģʽÒÔ¶Ô¿Í»§Í¸Ã÷µÄ·½Ê½ ¶¯Ì¬µØ¸øÒ»¸ö¶ÔÏ󸽼ÓÉϸü¶àµÄÔðÈΡ£»»ÑÔÖ®£¬¿Í»§¶Ë²¢²»»á¾õµÃ¶ÔÏóÔÚ×°ÊÎǰºÍ×°ÊκóÓРʲô²»Í¬¡£×°ÊÎģʽ¿ÉÒÔÔÚ²»Ê¹Óô´Ôì¸ü¶à×ÓÀàµÄÇé¿öÏ£¬½«¶ÔÏóµÄ¹¦ÄܼÓÒÔÀ©Õ¹¡£ËûµÄÿ Ò»Öֱ仯¶¼¸øËû´øÀ´Ò»ÖÖ¸½¼ÓµÄ±¾Áì¡£Ëû±ä³ÉÓã¶ùʱ£¬¾Í¿ÉÒÔµ½Ë®ÀïÓÎÓ¾£»Ëû±ä³Éȸ¶ùʱ£¬ ¾Í¿ÉÒÔÔÚÌìÉÏ·ÉÐС£¶ø²»¹ÜÎò¿ÕÔõô±ä»¯£¬ÔÚ¶þÀÉÉñÑÛÀËûÓÀÔ¶ÊÇÄÇÖ»â©áø¡£×°ÊÎģʽÒÔ ¶Ô¿Í»§Í¸Ã÷µÄ·½Ê½¶¯Ì¬µØ¸øÒ»¸ö¶ÔÏ󸽼ÓÉϸü¶àµÄÔðÈΡ£»»ÑÔÖ®£¬¿Í»§¶Ë²¢²»»á¾õµÃ¶ÔÏóÔÚ ×°ÊÎǰºÍ×°ÊκóÓÐʲô²»Í¬¡£×°ÊÎģʽ¿ÉÒÔÔÚ²»Ê¹Óô´Ôì¸ü¶à×ÓÀàµÄÇé¿öÏ£¬½«¶ÔÏóµÄ¹¦ÄÜ ¼ÓÒÔÀ©Õ¹¡£

   
2129 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ