반사 시 뮬 레이 션 을 통 해 AOP 의 동적 에이전트
3726 단어 JAVA
#xxx=java.util.ArrayList
xxx=AOPProxy.ProxyFactoryBean
xxx.advice=AOPProxy.Advice
xxx.target=java.util.ArrayList
BeanFactory
package AOPProxy;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class BeanFactory {
Properties pro = new Properties();
public BeanFactory(InputStream is) throws IOException{
pro.load(is);
}
public Object getBean(String name) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Object proxy = null;
String className = pro.getProperty(name);
Class cla = Class.forName(className);
Object bean = (Object)cla.newInstance();
System.out.println("-----------------");
if(bean instanceof ProxyFactoryBean){
Advice advice =(Advice) Class.forName((String)pro.get(name +".advice")).newInstance();
Object target = (Object)Class.forName((String)pro.get(name +".target")).newInstance();
ProxyFactoryBean proxyFactoryBean = (ProxyFactoryBean)bean;
proxyFactoryBean.setAdvice(advice);
proxyFactoryBean.setTarget(target);
proxy = (proxyFactoryBean).getProxy();
return proxy;
}
return bean;
}
private Object ProxyFactoryBean(Object bean) {
// TODO Auto-generated method stub
return null;
}
}
ProxyFactoryBean
package AOPProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyFactoryBean {
private Advice advice;
private Object target;
public Advice getAdvice() {
return advice;
}
public void setAdvice(Advice advice) {
this.advice = advice;
}
public Object getTarget() {
return target;
}
public void setTarget(Object target) {
this.target = target;
}
public Object getProxy() {
// TODO Auto-generated method stub
Object proxy3 = (Object)Proxy.newProxyInstance(
target.getClass().getClassLoader(),
//new Class[]{Collection.class},
target.getClass().getInterfaces(),
new InvocationHandler() {
// , ,
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
/* long bt = System.currentTimeMillis();
//
Object retVal = method.invoke(target, args);
for (int i = 0; i <10; i++) {
}
long et = System.currentTimeMillis();
System.out.println(method.getName()+" "+ (et - bt )+"hehe");
return retVal;*/
//
advice.beforeMethod(method);
//
Object retVal = method.invoke(target, args);
for (int i = 0; i <10; i++) {
}
advice.afterMethod(method);
return retVal;
}
}
);
return proxy3;
}
}
AOPTest
package AOPProxy;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
public class AopTest {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IOException {
InputStream is = (InputStream)AopTest.class.getResourceAsStream("config.properties");
Object bean = (Object)new BeanFactory(is).getBean("xxx");
System.out.println(bean.getClass().getName());
//System.out.println(bean.getClass().getName());
}
}
Advice:
package AOPProxy;
import java.lang.reflect.Method;
public class Advice {
long bt,et;
public void beforeMethod(Method method) {
// TODO Auto-generated method stub
bt = System.currentTimeMillis();
}
public void afterMethod(Method method) {
// TODO Auto-generated method stub
et = System.currentTimeMillis();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.