目录
引入
在前面我们已经完成了IOC,DI,AOP的实现,基本的功能都已经完成了,我们的手写框架也能勉强使用起来。为了让我们的框架能够使用起来比较简单,这一节我们来实现注解和xml的配置。
tips
本章的xml和注解的功能都是为实现bean的创建,其他如aop等功能可仿造实现。
为什么要加注解和xml配置
如果有同学测试过我们写好的框架,可能会感受到使用起来非常麻烦,在测试的时候我们需要显示的来定义bean以及运行过程中需要的其他对象。
public void test() throws Exception { DefaultBeanDefinition bd = new DefaultBeanDefinition(); bd.setClazz(User.class); bd.setSingleton(true); bd.setBeanFactoryName("TestFactory"); bd.setCreateBeanMethodName("createMethod"); bd.setStaticCreateBeanMethodName("staticCreateMethod"); factory.register(bd, "user"); bd = new DefaultBeanDefinition(); bd.setClazz(BeforeAdvice.class); factory.register(bd, "myBeforeAdvice"); AopProxyCreator aapc = new AopProxyCreator(); aapc.setBeanFactory(factory); factory.registerBeanPostProcessor(aapc); // 向AdvisorAutoProxyCreator注册Advisor aapc.register(new RegexMatchAdvisor("myBeforeAdvice", "execution(* bean.User.*())", new RegexExpressionPointCutResolver())); User user = (User) factory.doGetBean("user"); user.sayHello(); }如上为测试一个AOP的功能,需要定义很多的对象来完成功能,这还只是一个对象的功能增强,在实际使用中肯定会有大量的实例。这样在使用起来就变得及其麻烦了。参考Spring中,可以通过xml和annotation的方式来简化类定义或者其他一些处理。
注解和xml的整个处理过程
在实际实现之前,我们先来宏观的看一些注解和xml是如何来解析的。
基本上在spring中xml就是这样工作的,同理,注解也差不多是这样一个过程。
上面的这一过程实际上就是我们需要实现的功能,现在我们就根据以上过程进行实现吧。
XML
定义XML标记
这一小节的内容并不重要,实际就我们的开发中作用并不大,稍微了解即可。没兴趣的可以直接跳到下一节。
定义xml标记的方式有dtd和xsd两种,假设我想定义一个下面这样的xml标记:
<?xml version="1.0"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>那么我们既可以用dtd实现,也可以用xsd实现:
dtd
<!ELEMENT note (to, from, heading, body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>xsd
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema&
