原创spring aop精简版
来源:互联网 发布:知乎评论 编辑:程序博客网 时间:2024/05/17 11:35
//javabean 必须要有一个不带参数的构造器
config.properties
#xxx=java.util.ArrayList
xxx=cn.itcast.day3.aopframework.ProxyFactoryBean
xxx.advice=cn.itcast.day3.MyAdvice
xxx.target=java.util.ArrayList
BeanFactory.java
public class BeanFactory {
Properties props = new Properties();
public BeanFactory(InputStream ips){
try {
props.load(ips);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Object getBean(String name){
String className = props.getProperty(name);
Object bean = null;
try {
Class clazz = Class.forName(className);
bean = clazz.newInstance();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(bean instanceof ProxyFactoryBean){
Object proxy = null;
ProxyFactoryBean proxyFactoryBean = (ProxyFactoryBean)bean;
try {
Advice advice = (Advice)Class.forName(props.getProperty(name + ".advice")).newInstance();
Object target = Class.forName(props.getProperty(name + ".target")).newInstance();
proxyFactoryBean.setAdvice(advice);
proxyFactoryBean.setTarget(target);
proxy = proxyFactoryBean.getProxy();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return proxy;
}
return bean;
}
}
Advice.java
public interface Advice {
void beforeMethod(Method method);
void afterMethod(Method method);
}
MyAdvice.java
public class MyAdvice implements Advice {
long beginTime = 0;
public void afterMethod(Method method) {
// TODO Auto-generated method stub
System.out.println("毕业上班啦!");
long endTime = System.currentTimeMillis();
System.out.println(method.getName() + " running time of " + (endTime - beginTime));
}
public void beforeMethod(Method method) {
// TODO Auto-generated method stub
System.out.println("来学习啦!");
beginTime = System.currentTimeMillis();
}
}
ProxyFactoryBean.java
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 = Proxy.newProxyInstance(
target.getClass().getClassLoader(),
/*new Class[]{Collection.class},*/
target.getClass().getInterfaces(),
new InvocationHandler(){
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
/*long beginTime = System.currentTimeMillis();
Object retVal = method.invoke(target, args);
long endTime = System.currentTimeMillis();
System.out.println(method.getName() + " running time of " + (endTime - beginTime));
return retVal;*/
advice.beforeMethod(method);
Object retVal = method.invoke(target, args);
advice.afterMethod(method);
return retVal;
}
}
);
return proxy3;
}
}
AopFrameworkTest.java
public class AopFrameworkTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
InputStream ips = AopFrameworkTest.class.getResourceAsStream("config.properties");
Object bean = new BeanFactory(ips).getBean("xxx");
System.out.println(bean.getClass().getName());
((Collection)bean).clear();
}
}
- 原创spring aop精简版
- 【原创】Spring AOP小结
- 【原创】Spring-AOP代理类..
- 【原创】Spring-AOP代理类继承接口..
- cxf集成spring,精简版
- Spring启动过程(精简版)
- (原创)spring AOP 在service 层 不执行
- 注解版spring aop设置
- (精简)Spring框架的IoC(替代工厂类实现方法)和AOP(定义规则,约定大于配置)
- (精简)Spring框架的IoC(替代工厂类实现方法)和AOP(定义规则,约定大于配置)
- AOP、Spring的AOP
- AOP--Spring AOP
- Spring AOP 嵌套AOP
- spring aop 面向切面编程 如何来做一个强大的日志记录功能.原创
- spring aop 中@annotation()的使用,关于自定义注解,绝壁原创的文章
- spring AOP
- Spring AOP
- Spring AOP
- ios全景展示
- Objective-C位运算符-按位异或运算符
- .Net设计模式 Adapter 适配器模式(结构型模式)Adapter Pattern
- Objective-C位运算符-一次求反运算符
- nginx 自定义 header
- 原创spring aop精简版
- Objective-C位运算符-位运算符的程序实例
- 朋友出的一道算法题
- DDraw笔记-简单了解DirectX
- Winform和webserver之间sessionID的使用!
- Objective-C位运算符-向左移位运算符
- x264(一)---cqm表的理解
- DDraw笔记-双缓冲和后备缓冲
- Objective-C位运算符-向右移位运算符