最近在学习spring annotation,昨天晚上突然想到一个问题:用annotation这种零xml的方式会不会导致不灵活呢。举个例子,如下:
一个接口:
按照两种不同的业务规则,也许这个接口会存在两种实现
方式一:按照以前用xml配置的方式,当我们需要第一种业务规则,我们可以把xml写成这样:<bean id="student" class="com.xxx.StudentImpl"/>,而当我们需要第二种业务规则,很简单,修改xml:bean id="student" class="com.xxx.StudentImplExt"/>,这xml之间的转换可以通过代码生成器代劳,配置不同的模板即可,非常方便。
方式二:使用annotation后,在controller中必然会有这样的代码:
这样我想想,其实和硬编码的方式没什么两样,IStudent iStudent = new StudentImpl(),假如说要满足第一种方式里的需求,必须要去修改类中的注入代码,是不是很麻烦呢?
刚学习annotation,也许理解还不透彻,希望大家讨论一下,怎样能用annotation达到灵活的效果,或者说annotation真的不如以前xml的灵活?
一个接口:
public interface IStudent{
//to do something
}
按照两种不同的业务规则,也许这个接口会存在两种实现
public class StudentImpl implements IStudent{
//implements interface
}
public class StudentImplExt implements IStudent{
//implements interface
}
方式一:按照以前用xml配置的方式,当我们需要第一种业务规则,我们可以把xml写成这样:<bean id="student" class="com.xxx.StudentImpl"/>,而当我们需要第二种业务规则,很简单,修改xml:bean id="student" class="com.xxx.StudentImplExt"/>,这xml之间的转换可以通过代码生成器代劳,配置不同的模板即可,非常方便。
方式二:使用annotation后,在controller中必然会有这样的代码:
@Autowired(required=true) @Qualifier("studentImpl")
IStudent iStudent
这样我想想,其实和硬编码的方式没什么两样,IStudent iStudent = new StudentImpl(),假如说要满足第一种方式里的需求,必须要去修改类中的注入代码,是不是很麻烦呢?
刚学习annotation,也许理解还不透彻,希望大家讨论一下,怎样能用annotation达到灵活的效果,或者说annotation真的不如以前xml的灵活?