package com.zdp.spring;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.zdp.advisor.Advisor;
/**
* Bean工厂类
* @author zhangjim
*/
public class BeanFactory {
private Map<String, Object> beansMap = new HashMap<String, Object>();
/**
* Bean工厂的初始化
*/
public void init(String xml) {
try {
SAXReader reader = new SAXReader();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream ins = classLoader.getResourceAsStream(xml); // 读取指定的配置文件
Document doc = reader.read(ins);
Element root = doc.getRootElement();
AopHandler aopHandler = new AopHandler(); // 创建AOP处理器
for (Iterator iter = root.elementIterator("bean"); iter.hasNext();) { // 遍历bean
Element element = (Element) iter.next();
Attribute id = element.attribute("id"); // 获取bean的属性id、class、aopClass、aopType
Attribute cls = element.attribute("class");
Attribute aopClass = element.attribute("aopClass");
Attribute aopType = element.attribute("aopType");
if (aopClass != null && aopType != null) { // 如果配置了aopClass和aopType属性时,需进行拦截操作
Class advisorClass = Class.forName(aopClass.getText()); // 根据aopClass字符串获取对应的类
Advisor advisor = (Advisor) advisorClass.newInstance(); // 创建该类的对象
if ("before".equals(aopType.getText())) { // 根据aopType的类型来设置前置或后置顾问
aopHandler.setBeforeAdvisor(advisor);
} else if ("after".equals(aopType.getText())) {
aopHandler.setAfterAdvisor(advisor);
}
}
Class clazz = Class.forName(cls.getText()); // 利用Java反射机制,通过class的名称获取Class对象
Object obj = clazz.newInstance(); // 创建一个对象
Object proxy = (Object) aopHandler.setObject(obj); // 产生代理对象proxy
beansMap.put(id.getText(), proxy); // 将对象放入beansMap中,其中id为key,对象为value
}
} catch (Exception e) {
System.out.println(e.toString());
}
}
/**
* 通过bean的id获取bean的对象.
* @param beanName bean的id
* @return 返回对应对象
*/
public Object getBean(String beanName) {
Object obj = beansMap.get(beanName);
return obj;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
模拟spring aop技术
共26个文件
class:8个
java:8个
xml:3个
5星 · 超过95%的资源 需积分: 9 55 下载量 195 浏览量
2014-05-02
22:31:50
上传
评论
收藏 296KB RAR 举报
温馨提示
模拟spring aop技术,一个小demo,希望对您理解aop有所帮助.
资源推荐
资源详情
资源评论
收起资源包目录
MySpringAOP.rar (26个子文件)
MySpringAOP
.project 1KB
.mymetadata 306B
src
beans.xml 202B
com
zdp
service
BusinessServiceImpl.java 254B
BusinessService.java 168B
advisor
AfterMethodAdvisor.java 352B
BeforeMethodAdvisor.java 355B
Advisor.java 238B
test
Client.java 406B
spring
BeanFactory.java 2KB
AopHandler.java 2KB
WebRoot
WEB-INF
classes
beans.xml 202B
com
zdp
service
BusinessServiceImpl.class 594B
BusinessService.class 151B
advisor
Advisor.class 202B
BeforeMethodAdvisor.class 778B
AfterMethodAdvisor.class 773B
test
Client.class 774B
spring
BeanFactory.class 3KB
AopHandler.class 2KB
lib
dom4j-1.6.1.jar 307KB
web.xml 371B
index.jsp 834B
META-INF
MANIFEST.MF 36B
.myeclipse
.settings
org.eclipse.jdt.core.prefs 330B
.classpath 436B
共 26 条
- 1
资源评论
- 四滴火2017-03-06测试可用啊啊
- kindlessfriend2014-07-25确实有助于理解aop,好资源
zdp072
- 粉丝: 687
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功