Spring 基于注解 和 基于配置的一点问题?
2. 基于配置的使用方法,需要配置<context:component-scan base-package="com.***"/>; 那为什么要指定包名, 不能整个工程都使用注解吗? 或者有可以整个可以使用注解的方式, 那能不能连这个配置也舍弃了?
初学者,有点不明白,希望大家能够指点一下
8 个回答
最开始是自己new实例,然后出现了XML配置,但是XML配置一多就让人头痛,于是有了annotation-config,不用配置<property>和<constructor-arg>。但是bean一多一个一个写<bean>下去也麻烦,component-scan就可以通过注解解决这个麻烦。但是有些程序员是痛恨XML联盟的,于是又有基于Java的配置,通过Configuration和Bean这两个注解,完全不用配置XML了。
当然你也可以让Spring扫描整个工程,但是工程一大,这也会影响性能。况且现在架构都是分层的,有些包根本就没有注解。在Spring出现之前,是通过new 对象来实例化bean的。Spring发现:靠,到处都是new不好管理,我来告诉大家一个不需要new的方法。 于是用xml配置文件将要实例化的代码进行配置。 这样配置之后发现:靠这么多bean一个一个写会写死啊,于是来一个componet-scan 将在包下的添加了注解的bean进行初始化。
好吧!其实,基于注解是在java5中才出现的。我有段时候很讨厌用xml配置,都使用注解,后面发现有些还是xml方便,毕竟改java文件还是麻烦一些,所以我现在的策略是:不会修改、极少修改的用注解,会修改的用xml配置,如AOP的配置我就用XML,因为这个的改成场景比较多。
同意
,注解使用还是谨慎些,我习惯使用xml,项目的配置文件基本在一个目录,有哪些配置很容易了解,你加个注解可能散到项目内各个位置,不好管理。当然也会用些注解,如1.spring mvc controller中全部注解完成
2.Autowired注解
其余的全部xml
如数据库、系统环境配置、实体映射关系、实体描述、aop等。。
另外,最近用了spring boot,看来注解还是很受大家欢迎的
过去的惯用法是所有东西都用xml配置,美其名曰配置代码分离,但是不见得多清晰,而且要等到运行期才知道写没写错。最大的好处可能是配置都堆在一起,不会看漏。
代码配置也不是所有东西都用代码,大多数真正的变量,比如数据库地址,还是在配置文件里。通常不变的东西,比如Bean的声明,放在了代码里。但是如果使用不当项目里到处飞配置也挺难受的。
首先呢。我说说我们公司开发的情况。
首先我们大部分都是使用注解的方式来做开发,少数需要固定配置的东西我们会使用xml来维护。所以使用注解和包扫描来进行对象或者某些配置拦截器或者适配器,或者初始化的时候挺多的。
另外至于为什么不使用直接扫面整个工程这种做法呢
举个例子来说明好了,例如你有两个相同名字的适配器来做不同的操作,那么你需要指定到扫描那个具体的包来执行。指定到具体某个包下,可以减少有可能出现重名配置类的冲突。
哦,还有一点,我们做开发的时候,mvc分层,分包其实很细致。所以指定到具体的包很有必要。