博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
容器+AOP实现动态部署(三)
阅读量:5283 次
发布时间:2019-06-14

本文共 2048 字,大约阅读时间需要 6 分钟。

  上节咱们谈到容器的基本特性,这次继续说容器怎样与AOP进行结合。增强咱们的对象。为对象加入额外的方法。

咱们下面方图为说明

 

    业务对象通过business 的容器我们能够注入,服务类的对象我们通过Service容器将公共类的对象进行注入。关系增强型AOP则通过组合两者关系进行确定性和不不定性的叠加处理。他们的初始化是通过容器的初始化进行装载的。

实例代码

 1 初始化对象容器

public class ClassPathXmlApplicationContext {		// 业务容器beans	private Map
businessBeans = new HashMap
(); // 公共服务容器beans private Map
aspectBeans = new HashMap
(); //关系集合配置 private Map
relationBeans = new HashMap
(); // 设置是否须要aop private boolean isAop = true; /**

有了各个容器对象的支持。就为咱们兴许动态调用提供了有力的保障

增强服务是Aop的特性,请參考博客【动态代理】这里是通过模拟JDK代理进行实现的。

 

2 获取对象,辨别是否增强

2.1基本版本号

简单的动态调用方式是,在client进行赋值例如以下 

public static void main(String[] args) {        Greeting greeting = new JDKDynamicProxy(newGreetingImpl()).getProxy();//參数为详细的类型        greeting.sayHello("Jack");    }

由于咱们业务颗粒都在business容器中,所以咱们能够通过业务容器提供的方法直接获取,这样client就不用知道详细的类型了。

2.2增强版

/** * 获取容器中指定对象 * * @param id *           对象名称如:getBean("user") * @return */public Object getBean(String id) {      return  businessBeans.get(id);}

而将对象增强与否是通过咱们的AOP关系进行解析的。所以。以上的方式是不能实现增强的,必须在返回值的时候进行截取,所以在return上动了手脚

 

2.3加强版

/** * 获取容器中指定对象 *  * @param id *            对象名称如: getBean("user") * @return */public Object getBean(String id) {        //IsAop标签进行辨别是否增强	if (!isAop) {		return businessBeans.get(id);	}	//JDK代理类实现动态增强服务	return new JDKDynamicProxy(businessBeans.get(id), aspectBeans, businessBeans,relationBeans)			.getProxy();}

通过getBean方法我们获取拦截对象。同一时候我们将服务类容器,关系容器一起进行传入。这样达到了一个什么效果呢?请看下图

 

AOP容器中,我们拥有了业务对象,服务对象和关系集合。通过解析关系集合我们动态 Invoke服务的方法在业务方法前后进行增强。

描写叙述完毕后,咱们再看详细的实现。

简单的JDK方法调用还请參考博客。这里我们对代理类进行了封装。

3 配置文件 

3.1服务类配置XML Service.xml

3.2关系配置Aop.xml

小结:

到此容器和AOP的结合已经基本成型。我们是通过在获取容器对象之时对该对象进行了代理,将该对象转入到AOP容器中,这样在AOP容器中对该对象进行一系列的增强。

容器事先没有不论什么对象。在执行时进行装配。进行实时存取。带到动态代理。下篇咱们介绍AOP对象的详细增强方式。

转载于:https://www.cnblogs.com/gccbuaa/p/7117665.html

你可能感兴趣的文章
web service和ejb的区别
查看>>
Windows Azure Cloud Service (29) 在Windows Azure发送邮件(下)
查看>>
微信上传素材返回 '{"errcode":41005,"errmsg":"media data missing"}',php5.6返回
查看>>
div或者p标签单行和多行超出显示省略号
查看>>
Elasticsearch 滚动重启 必读
查看>>
Hadoop基本概念
查看>>
java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
查看>>
浅说 apache setenvif_module模块
查看>>
MySQL--数据插入
查看>>
重新学习python系列(二)? WTF?
查看>>
shell脚本统计文件中单词的个数
查看>>
SPCE061A学习笔记
查看>>
sql 函数
查看>>
hdu 2807 The Shortest Path 矩阵
查看>>
熟悉项目需求,要知道产品增删修改了哪些内容,才会更快更准确的在该项目入手。...
查看>>
JavaScript 变量
查看>>
java实用类
查看>>
smarty模板自定义变量
查看>>
研究称90%的癌症由非健康生活习惯导致
查看>>
命令行启动Win7系统操作部分功能
查看>>