Autowirde和Resource注入的问题
起因:今天的开发中又踩到了坑,完成数据库切换的工作之后提交了代码,发现有一处提示错误,本着不能有错误的原则,将此处的autowirde改为了resource,结果提交之后TMD代码跑不起来了。
疑问:
- 为什么autowirde提示报错却可以成功运行,resource刚好相反?
- 两者区别?
答案:
- autowirde是默认通过声明的类型注入也就是大家都在说的bytype,resource是默认通过变量名注入也就是byname,也就是会通过类型或者变量名在ioc容器寻找注入bean。我出现的错误就是因为在别的类中还有一个不同类型的但变量名相同的
paramMapper
所以会出错,改为autowirde通过声明的类型注入就不会出现这个错误;autowirde报错是因为idea的报警机制,autowirde注入时要求(注入)对象不能为 NULL,idea无法识别mybatis的注解所以无法判断为不为null所以会报错 - 除了默认优先注入方式不同;还有提供方不同,autowirde为spring提供,resource为java提供;autowirde需要注入对象存在于ioc容器中