AccountServiceCenter项目中有些依赖注入的Bean同时使用了XML配置和注解的方式进行了声明,网上有人说这种情况下注解的优先级高,但我测试过后发现当两种方式并存的时候Spring是优先使用XML配置的方式,忽略注解。大家可以选择其中的一种方式进行声明,虽然两种方式同时声明也不会出错,但容易让人迷惑。另外,项目中使用注解声明的时候有错误,但因为xml也配置了,所以错误被掩盖。以VersionDAO类为例,在类上面声明了@Repository("versionDAO"),但没有引用要依赖注入的SqlMapClient,也没有setReadSqlMapClient或setWriteSqlMapClient方法,这种情况是不能注入SqlMapClient的。正确的写法应该是
@Autowired
public void setReadSqlMapClient(@Qualifier("mappSqlMapClient")SqlMapClient readSqlMapClient)
注意@Autowired和@Qualifier的使用。没有@Autowired,spring不会调用setReadSqlMapClient方法,没有@Qualifier,spring虽然会调用setReadSqlMapClient方法但却找不到readSqlMapClient也会导致无法注入。
@Autowired
public void setReadSqlMapClient(@Qualifier("mappSqlMapClient")SqlMapClient readSqlMapClient)
注意@Autowired和@Qualifier的使用。没有@Autowired,spring不会调用setReadSqlMapClient方法,没有@Qualifier,spring虽然会调用setReadSqlMapClient方法但却找不到readSqlMapClient也会导致无法注入。