锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
AOP 鏈
榪炴帴鐐?(Joinpoint) 紼嬪簭鎵ц鐨勭壒瀹氫綅緗?綾誨紑濮嬪垵濮嬪寲鍓嶃佺被鍒濆鍖栧悗銆佽皟鐢ㄥ墠鍚庛佸紓甯告姏鍑哄悗)
鍒囩偣: (PointCut) 紼嬪簭綾諱腑瀹㈣瀛樺湪鐨勪簨鐗╋紙綾諱腑鐨勬柟娉曪級
澧炲己 : (Advice) 緗叆鍒扮洰鏍囩被Joinpint鐨勪竴孌典唬鐮?br />
鐩爣瀵硅薄:(Target) 寮曚粙(Introduction) 緇囧叆(Weaving) 浠g悊(Proxy) 鍒囬潰(Aspect):鍒囩偣鍜屽寮虹殑緇勬垚
鍩虹鐭ヨ瘑: Spring Aop :浣跨敤鍔ㄦ佷唬鐞嗘妧鏈湪榪愯鏈熼棿緇囧叆澧炲己浠g爜
ProxyFactory 浠g悊宸ュ巶閲囩敤JDK浠g悊鎴朇GLib浠g悊鎶鏈?br />
JDK 鍔ㄦ佷唬鐞?
1.瀹氫箟UserService鎺ュ彛鍑芥暟:
public interface UserService {
public void addUser(int id);
}
public class UserServiceImpl implements UserService{
public void addUser(int id){
System.out.println("娣誨姞涓涓敤鎴蜂腑 錛?/span>"+id);
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class ProxyHandler implements InvocationHandler{
private Object target;
public ProxyHandler(Object target){
this.target=target;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("娣誨姞鐢ㄦ埛鍓?/span>");
Object obj=method.invoke(target,args);
System.out.println("娣誨姞鐢ㄦ埛鍚?/span>");
return obj;
}
}
import java.lang.reflect.Proxy;
public class ProxyHandlerTest {
public static void main(String args[]){
UserService target=new UserServiceImpl();
ProxyHandler handler=new ProxyHandler(target);
UserService proxy=(UserService)Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
handler);
proxy.addUser(100);
}
}
AddUserService鎺ュ彛:
public interface AddUserService {
public void addUser(int id);
}
AddUserServiceImpl 瀹炵幇綾?
public class AddUserServiceImpl implements AddUserService {
public void addUser(int id) {
System.out.println("娣誨姞鐢ㄦ埛ID涓?"+id);
}
}
package CGlib.Text.Service;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class CglibProxy implements MethodInterceptor{
private Enhancer enhancer=new Enhancer();
@SuppressWarnings("unchecked")
public Object getProxy(Class clazz){
enhancer.setSuperclass(clazz);
enhancer.setCallback(this);
return enhancer.create();
}
public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
System.out.println("娣誨姞鐢ㄦ埛涔嬪墠");
System.out.print(method.getName());
System.out.print(obj.getClass().getName()+"澶栧姞");
System.out.print(args.getClass().getName());
Object result=proxy.invokeSuper(obj, args);
System.out.println("澶栧姞鐨勫弬鏁?/span>"+args.toString());
System.out.println("娣誨姞鐢ㄦ埛涔嬪悗");
// TODO Auto-generated method stub
return result;
}
}
CglibProxyTest:嫻嬭瘯綾?br />
package CGlib.Text.Service;
public class CglibProxyTest {
public static void main(String[] args){
CglibProxy proxy=new CglibProxy();
AddUserServiceImpl userService=
(AddUserServiceImpl)proxy.getProxy(AddUserServiceImpl.class);
userService.addUser(100);
}
}
瀵笿DK鍔ㄦ佷唬鐞嗗拰Cglib鍔ㄦ佷唬鐞嗙殑鐞嗚В錛?br />
JDK 浠g悊鏃舵ц兘楂橈紝浣嗙敓鎴愪唬鐞嗗璞℃椂榪愯鎬ц兘杈冧綆
Cglib 浠g悊鏃舵ц兘浣庯紝浣嗙敓鎴愪唬鐞嗗璞℃椂榪愯鎬ц兘杈冮珮
鎵浠ワ細鍗曚緥Singleton 鏃墮噰鐢–GLib浠g悊銆?br />
]]>
Important |
Spring is an application framework. Unlike single-tier frameworks such as Struts or Hibernate, Spring aims to help structure whole applications in a consistent, productive manner, pulling together best-of-breed single-tier frameworks to create a coherent architecture. |
Problems with the Traditional Approach to J2EE
浼犵粺J2EE鏂規硶瀛樺湪鐨勯棶棰?/span>
Enter Spring
鎺ヨЕSpring
The key Spring values can be summarized as follows:
· Spring is a non-invasive framework.闈炰鏡鍏?
· Spring provides a consistent programming model, usable in any environment.
· Spring aims to promote code reuse.澶嶇敤
· Spring aims to facilitate Object Oriented design in J2EE applications.
· Spring aims to facilitate good programming practice, such as programming to interfaces, rather than classes.闈㈠悜鎺ュ彛
· Spring promotes pluggability.鎬ц兘
· Spring facilitates the extraction of configuration values from Java code into XML or properties files.
· Spring is designed so that applications using it are as easy as possible to test.
· Spring is consistent.
· Spring promotes architectural choice.
· Spring does not reinvent the wheel.