Spring系列之手写注解与配置文件的解析

 

目录

引入

在前面我们已经完成了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是如何来解析的。
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&
                    
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信