大家好,我是IT修真院深圳分院第4期学员,一枚正直善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务2中,深度思考部分的知识点——Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC??
一、背景介绍
Spring1.0支持基于XML的配置,Spring2.0新增基于注解的配置,Spring3.0新增基于Java类配置,
Spring4.0新增基于Groovy动态语言配置。
我们学习spring的第一个domo通常是使用XML配置的,而现在我们使用Spring和SpringMVC更多的是采用Annotation的方式。而在网上对于XML和Annotation哪个好用各有说法。那么二者之间有什么区别呢?
二、知识剖析
不管是XML还是注解,其本质都是为Spring容器提供Bean定义的信息。采用基于XML的配置,则Bean的定义信息和Bean实现类本身是分离的;而采用基于注解的配置文件,则Bean的定义信息通过在Bean实现类上标注注解实现。Spring Application Framework的核心是IoC容器。其作用包括对应用程序的对象进行实例化、初始化、装配以及在对象的整个生命周期中提供其他Spring功能。构成应用程序主要部分且由Spring容器进行管理的对象被称为Bean或者POJO。为实例化Bean并指定如何对这些Bean进行装配,需要向Spring容器提供相关信息,所提供的信息被称为配置元数据(configuration metadata)。
Bean的元数据由以下四方面组成:
Bean的实现类;
Bean的属性信息,如数据源的连接数、用户名、密码等;
Bean的依赖关系,Spring根据依赖关系配置完成Bean之间的装配;
Bean的行为配置,如生命周期及生命周期各个过程的回调函数等。
三、常见问题
1.基于XML配置和基于注解配置这两种方法分别适用哪些情况?
2.为什么SpringMVC更倾向于使用注解配置?
四、解决方案
1.基于XML配置和基于注解配置这两种方法分别适用哪些情况?
从客观情况上看:
1.Bean实现类来源于第三方类库,如DataSource、JdbcTemplate等,因为无法在类中标注注解,所以通过XML配置方式较好;
2.命名空间的配置,如aop、context等,只能采用基于XML的配置.
基于注解配置适用情况:
Bean的实现类是当前项目开发的,可以直接在Java类中使用基于注解的配置。
从主观情况上看
XML的优点:
1. XML配置方式进一步降低了耦合,使得应用更加容易扩展,即使对配置文件进一步修改也不需要工程进行修改和重新编译。
2. 在处理大的业务量的时候,用XML配置应该更加好一些。因为XML更加清晰的表明了各个对象之间的关系,各个业务类之间的调用。同时spring的相关配置也能一目了然。
缺点:
配置文件读取和解析需要花费一定的时间,配置文件过多的时候难以管理,无法对配置的正确性进行校验,增加了测试难度。
Annotation的优点:
1. 在class文件中,可以降低维护成本,annotation的配置机制很明显简单
2. 不需要第三方的解析工具,利用java反射技术就可以完成任务
3. 编辑期可以验证正确性,差错变得容易
4. 提高开发效率
缺点:
1. 如果需要对于annotation进行修改,那么要重新编译整个工程
2. 业务类之间的关系不如XML配置那样容易把握。
3. 如果在程序中Annotation比较多,直接影响代码质量,对于代码的简洁度有一定的影响。
2.回到的题目,为什么SpringMVC更倾向于使用注解配置?
1. SpringMVC框架给出了专用的几个注解,使其层次更加分明
2. MVC层次较为简单,而url映射也十分简单,哪个网址出错可以立即找到其映射类。
五、编码实战
六、扩展思考
我们前面看到的基于java的配置是什么?
在CSS中,两个或以上的块元素(可能是兄弟,也可能不是)之间的相邻外边距可以被合并成一个单独的外边距。通过此方式合并的外边距被称为折叠,且产生的已合并的外边距被称为折叠外边距。
处于同一个块级上下文中的块元素,没有行框、没有间隙、没有内边距和边框隔开它们,这样的元素垂直边缘毗邻,则称之为相邻。
七、参考文献
1.博客http://blog.sina.com.cn/s/blog_451f596201014z4k.html
2.陈雄华 林开雄 文建国著. 精通Spring 4.X 企业应用开发实战. 北京:电子工业出版社,2017.
八、更多讨论
1.@Autowired和@Resouce有什么区别么
有区别,@Autowired默认按bean类型注入,@Resouce默认按bean名字注入,不写名字但又写上参数时按bean类型注入,什么都没写按bean名字注入
2.@Controller @Service @Reposity 这几个注解有什么区别
为了区分Controller层、Service层和Dao层使用的注解,作用等同于@Component
详见视频:
PPT链接:
https://ptteng.github.io/PPT/PPT-java/java-task2-XML%20and%20Annotation.html#/
九、鸣谢
这是在甘乐师兄的小课堂基础上完成的,感谢甘乐师兄提供的资料!
感谢大家观看
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~
我的邀请码:13299900,或者你可以直接点击此链接:http://www.jnshu.com/login/1/13299900