涓銆丼pring IOC
涓轟嬌鐢⊿pring IoC瀹瑰櫒錛屽簲鐢ㄤ唬鐮佸彲浠ラ氳繃涓嬮潰涓や釜鎺ュ彛瀹屾垚錛?br />
1.BeanFactory銆傚綋搴旂敤鍒涘緩BeanFactory瀹炰緥鏃訛紝瀹為檯涓婃槸瀹屾垚浜咼avaBean鐨?strong>瀹炰緥鍖栥侀厤緗互鍙婄鐞?/strong>銆?/p>
Resource resource = new ClassPathResource("appcontext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
HelloWord hw = (HelloWorld)factory.getBean("fileHelloWorld");
appcontext.xml鐨勯儴鍒嗗唴瀹瑰涓嬬ず渚嬶細(xì)
1 <beans>
2 <bean name="hello" class="com.taiji.HelloWorld">
3 <property name='hello'>
4 <value>I love you!</value>
5 </property>
6 <property name='person'>
7 <ref bean="person" />
8 </property
9 </bean>
10 <bean name="person">
11 <property name='name'>
12 <value>Liu</value>
13 </property>
14 <property name='age'>
15 <value>25</value>
16 </property
17 </bean>
18 </beans>
2.ApplicationContext銆傜戶鎵夸簬BeanFactory錛屼富瑕佺敤浜嶫2EE寮鍙戯紝涔熸槸Spring鎺ㄨ崘浣跨敤鐨勬帴鍙c傚浜嶹eb搴旂敤鑰?
璦,褰揓2EE Web搴旂敤閮ㄧ講騫跺惎鍔ㄦ椂錛孲pring
ApplicationContext灝嗕細(xì)鑷姩琚疄渚嬪寲銆傞氳繃ContextLoaderServlet鍜孋ontextLoaderListener鑳?
澶熻嚜鍔ㄥ垱寤篈pplicationContext瀹炰緥錛屽紑鍙戣呬篃鍙互鎵嬪姩鍒涘緩銆傚浜巗truts錛岄噰鐢≒lugIn鐨勬柟寮忓姞杞芥槸涓涓潪甯稿ソ鐨勬柟寮忋傝鍓嶉潰
鐨?a href="../../persister/archive/2006/09/25/71767.html">struts鍜宻pring鐨勬暣鍚堟柟妗堛?/a>
閭d箞Spring鏄庝箞鍋氬埌IOC鐨勫憿錛烰ava鐨勫弽灝勫嵆鍙疄鐜癐OC鏈哄埗錛岄氳繃鍙嶅皠鍙互鐢熸垚瀵硅薄瀹炰緥錛屽茍涓旈氳繃璋冪敤鍏秙et鏂規(guī)硶璁劇疆瀵硅薄鐨勫睘鎬э細(xì)
public static Object newInstance(String className) {
Class<?> cls = null;
Object obj = null;
try {
cls = Class.forName(className);
obj = cls.newInstance();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return obj;
}
public static void setProperty(Object obj, String name, String value) {
Class<? extends Object> clazz = obj.getClass();
try {
String methodName = returnSetMthodName(name);
Method[] ms = clazz.getMethods();
for (Method m : ms) {
if (m.getName().equals(methodName)) {
if (m.getParameterTypes().length == 1) {
Class<?> clazzParameterType = m.getParameterTypes()[0];
setFieldValue(clazzParameterType.getName(), value, m,
obj);
break;
}
}
}
} catch (SecurityException e) {
throw new RuntimeException(e);
} catch (IllegalArgumentException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
}
IOC涓嶉毦鍚э紝浣犱篃鍙互鍋氫竴涓狪OC妗嗘灦鍝︼紵
浜屻丼pring AOP
Spring鐨凙OP瑕佸鏉備竴浜涳紝涓嶆槸浠呬粎鎼炰釜鍙嶅皠灝辮兘瑙e喅鐨勩侫OP鏈綆鍗曠殑瀹炵幇鏈哄埗灝辨槸JAVA鐨勫姩鎬佷唬鐞嗐?/p>
鍔ㄦ佷唬鐞嗗湪璋冪敤鐪熸鐨勪笟鍔$被鏂規(guī)硶涔嬪墠鎴栦箣鍚庨兘鎻掑叆浜嗕唬鐮侊紝榪欏氨鏄疛DK鐨勫姩鎬佷唬鐞嗗仛鐨勪簨鎯咃紝濡備笅鏄竴涓姩鎬佷唬鐞嗙殑渚嬪瓙錛?/p>
public interface Action {
void method();
}
public class ActionImpl implements Action
{
public void mothod() {
System.out.println("Action!");
}
}
public class MyInvocationHandler implements InvocationHandler {
private Object obj;
public MyInvocationHandler(Object obj) {
this.obj = obj;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("Before Action");
Object returnObject = method.invoke(obj, args);
System.out.println("After Action.");
return returnObject;
public static void main(String[] args) throws InterruptedException,
IllegalArgumentException, SecurityException,
InstantiationException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException {
//瀹炵幇涓氬姟閫昏緫鐨勭被
ActionImpl a = new ActionImpl();
//JDK鍒涘緩鐨勫姩鎬侀昏緫綾?璋冪敤涓婇潰鐨勬瀯閫犲嚱鏁版敞鍏?/span>
MyInvocationHandler myInvocation = new MyInvocationHandler(a);
//寤轟笟鍔¢昏緫綾葷殑鍔ㄦ佷唬鐞嗙被
Object proxy = Proxy.newProxyInstance(ActionImpl.class.getClassLoader(),
ActionImpl.class.getInterfaces(), myInvocation);
//涓氬姟綾昏嚜宸辮皟鐢ㄨ繍琛屼唬鐞嗗璞?/span>
Action action = (Action) proxy;
action.method();
}
}
榪愯鍚庝細(xì)鎵撳嵃鍑猴細(xì)
Before Action.
Action!
After Action.
Java鐨勫姩鎬佷唬鐞嗘湁涓涓己闄鳳紝瀹冧唬鐞嗙殑綾誨繀欏繪湁涓涓帴鍙g被錛屽惁鍒欏氨涓嶈兘瀹炵幇鍔ㄦ佷唬鐞嗐傚湪闈㈠悜鎺ュ彛鐨勭紪紼嬮噷闈紝涔熻涓嶄細(xì)鏈夐棶棰橈紝浣嗘槸浜嬫儏鎬繪槸鏈夌壒孌婏紝閭e浣曞疄鐜板憿錛熷湪Spring涓槸閫氳繃CGLIB鏉ュ疄鐜扮殑銆侰GLIB鍙互鐩存帴瀵圭被榪涜澧炲己銆傚涓嬩唬鐮佸涓涓被榪涜澧炲己錛?/p>
public class MyClass {
public void method() {
System.out.println("MyClass.method()");
}
}
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodProxy;
import net.sf.cglib.proxy.MethodInterceptor;
public class Main {
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(MyClass.class);
enhancer.setCallback( new MethodInterceptorImpl() );
MyClass my = (MyClass)enhancer.create();
my.method();
}
}
class MethodInterceptorImpl implements MethodInterceptor {
public Object intercept(Object obj,
Method method,
Object[] args,
MethodProxy proxy) throws Throwable {
System.out.println(method);
proxy.invokeSuper(obj, args);
return null;
}
}
鎵ц緇撴灉錛?br />
public void MyClass.method()
MyClass.method()
鍙互鐪嬪埌閫氳繃CGLIB瀹炵幇綾繪柟娉曠殑澧炲姞騫朵笉姣斿姩鎬佷唬鐞嗗鏉傘傚綋鐒禨pring涓渶瑕佽冭檻鐨勪笢瑗挎洿澶氾紝鍏蜂綋鍙互鐮旂┒org.springframework.aop.framework.Cglib2AopProxy.java錛屽疄鐜拌搗鏉ユ洿澶嶆潅銆傝繖閲屽彧鏄祬鏋愶紝鏈夊姪浜庣悊瑙e惂銆?/p>

]]>