@Autowired注解的2种方式

sunstubble 2018-09-04 04:53:30
private A a;

@Autowired
public c(A a) {
this.a= a;
}

@Autowired
private A a;

这2中写法有什么区别吗?推荐写哪种呢谢谢了
...全文
1114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyh9001 2018-09-16
  • 打赏
  • 举报
回复
在报错位置打断点 很容易找的 楼主试着学习debug
sunstubble 2018-09-11
  • 打赏
  • 举报
回复
但一般用的是模型驱动,当模型不够时,用属性驱动.
什么叫模型驱动,什么又是模型不够?
如果这样set的话为什么不直接用构造器注入?你这样需要注入的属性一多 set代码就有好多阅读上面也不方便,构造方法至少只要看一个地方了吧,还有看来最方便的最简洁 field注入是不推荐使用了
冲上云霄 、 2018-09-11
  • 打赏
  • 举报
回复
都是大佬。。。。。。。
  • 打赏
  • 举报
回复
改一下
@Autowired
private A abc;


public setAbc(A a) {
this.abc= a;
}
  • 打赏
  • 举报
回复
楼上总结的很好。但一般用的是模型驱动,当模型不够时,用属性驱动,属性驱动也就是你用的这个setter注入,一般还是用
@Autowired
private A abc;


public setAbc(A a) {
this.a= a;
}
结合模型驱动用。
记住八字真言:“模型不够,属性来凑”。
谙忆 2018-09-04
  • 打赏
  • 举报
回复
@autowired写在变量上的注入要等到类完全加载完,才会将相应的bean注入。

写在方法上是为了在构造方法中使用到该变量。写到构造方法中,也就是有了先后的注入依赖关系
lansetiankong_yiyi 2018-09-04
  • 打赏
  • 举报
回复
第一个是通过构造器注入, 第二个是通过field反射注入
弊端

如果你使用的是构造器注入
恭喜你,当你有十几个甚至更多对象需要注入时,你的构造函数的参数个数可能会长到无法想像。

如果你使用的是field反射注入
如果不使用Spring框架,这个属性只能通过反射注入,太麻烦了!这根本不符合JavaBean规范。
还有,当你不是用过Spring创建的对象时,还可能引起NullPointerException。
并且,你不能用final修饰这个属性。

如果你使用的是setter方法注入
那么你将不能将属性设置为final。

两者取其轻

Spring3.0官方文档建议使用setter注入覆盖构造器注入。
Spring4.0官方文档建议使用构造器注入。

结论

如果注入的属性是必选的属性,则通过构造器注入。
如果注入的属性是可选的属性,则通过setter方法注入。
至于field注入,不建议使用。

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧