11.6实现一个类似于spring的可配置的AOP框架
来源:互联网 发布:波兰计算器c语言 编辑:程序博客网 时间:2024/06/03 17:58
p { margin-bottom: 0.21cm; }
此框架实现了再配置文件里面配置一个对象是否使用代理
类说明
ProxyFactoryBean类是得到Proxy对象
BeanFactory类是得到配置文件中的配置信息
Advice接口为通知接口
配置文件配置方法
对象名(随便命名) 配置实体对象如果没有代理对象就直接写上实体对象
对象名.advice 配置advice类 即配置通知类通知类需要实现advice接口
对象名.target配置返回类 即实体对象
实例
#xxx=java.util.ArrayList
xxx=cn.itcast.day3.aopframework.ProxyFactoryBean
xxx.advice=cn.itcast.day3.MyAdvice
xxx.target=java.util.ArrayList
ProxyFactoryBean
publicclassProxyFactoryBean{
//建议接口(通知接口 可以自己添加通知)
privateAdvice advice;
//返回对象(实体对象)
privateObject target;
publicAdvice getAdvice() {
returnadvice;
}
publicvoidsetAdvice(Advice advice) {
this.advice= advice;
}
publicObject getTarget() {
returntarget;
}
publicvoidsetTarget(Object target) {
this.target= target;
}
public Object getProxy() {
Objectproxy = Proxy.newProxyInstance(
target.getClass().getClassLoader()
,target.getClass().getInterfaces(),
newInvocationHandler() {
@Override
publicObject invoke(Object proxy, Method method,
Object[]args) throwsThrowable {
//前置通告
advice.afterMethod(method);
//执行对象的方法 使用的反射技术
ObjectreVal = method.invoke(target,args);
//后置通知
advice.beforMethod(method);
returnreVal;
}
});
returnproxy;
}
}
BeanFactory
publicclassBeanFactory {
Propertiesproperties= newProperties();
publicBeanFactory(InputStream in) {
try{
properties.load(in);
}catch(Exception e) {
e.printStackTrace();
}
}
/**
*判断是否配置了代理类 如果配置了代理类 就返回代理类 如果没有配置代理类 就直接返回实体类“返回对象”
**/
publicObject getBean(String name){
StringclassName = properties.getProperty(name);
Objectbean = null;
try{
Classclazz = Class.forName(className);
bean= clazz.newInstance();
}catch(Exception e) {
e.printStackTrace();
}
//判断在配置文件中是否配置代理类 如果配置了代理类 bean就为ProxyFactoryBean 如果没配置代理类 bean就为实体对象 即“返回对象target”
if(beaninstanceofProxyFactoryBean){
Objectproxy = null;
ProxyFactoryBeanproxyFactoryBean = (ProxyFactoryBean)bean;
try{
Adviceadvice =(Advice)Class.forName(properties.getProperty(name+".advice")).newInstance();
Objecttarget =Class.forName(properties.getProperty(name+".target")).newInstance();
proxyFactoryBean.setAdvice(advice);
proxyFactoryBean.setTarget(target);
proxy= proxyFactoryBean.getProxy();
}catch(Exception e) {
e.printStackTrace();
}
returnproxy;
}
returnbean;
}
}
调用方法
//调用aop框架 传入一个输入流
InputStreamins =AopFrameworkTest.class.getResourceAsStream("config.properties");
//指定配置文件中属性名得到返回对象 准备调用
Objectbean = newBeanFactory(ins).getBean("xxx");
System.out.println(bean.getClass().getName());
((Collection)bean).clear();
- 11.6实现一个类似于spring的可配置的AOP框架
- 实现类似于Spring的可配置的AOP框架
- 黑马程序员——用动态生成类实现类似于spring的可配置的AOP框架
- 黑马程序员--代理+AOP--实现一个类似spring的可配置的简单AOP框架
- 实现类似spring的可配置的AOP框架
- 实现类似spring的可配置的AOP框架
- 实现类似spring的可配置的AOP框架
- 实现类似Spring的可配置的AOP框架
- 实现类似spring的可配置的aop框架
- java实现类似spring的可配置AOP框架
- 学习笔记--代理与AOP及实现类似SPRING的可配置的AOP框架
- java基础--实现类似Spring的可配置的aop框架
- 黑马程序员--基础加强--第九篇--实现类似spring的可配置的AOP框架
- 黑马程序员 实现类似spring的可配置的AOP框架
- Java动态代理-实现类似spring的可配置的AOP框架
- 黑马程序员_模拟Spring可配置的AOP框架
- 黑马程序员-代理、实现类似Spring的可配置AOP框架
- 基于JDK的实现可配置的AOP框架
- 11.2 创建动态代理实例即调用其方法
- 架构师之路:学会设计模式
- 11.3 InvocationHandler对象运行原理
- 11.4 可执行代理和插入通告的通用方法
- 11.5 将代理方法封装成一个类(通用)
- 11.6实现一个类似于spring的可配置的AOP框架
- 12.1 AWT的基础知识和Frame类
- 12.2 事件监视器XxxListener
- POJ-1065-Wooden Sticks-贪心-多关键字排序
- 12.3 事件适配器XxxAdapte
- 12.4 修改组件的默认事件处理方式
- 数据挖掘 graph mining 之 ranking 介绍
- 12.5.1 Graphics类与图形绘制和组件重绘的处理
- 日记导航