T. *_*ung 90 java portlet dependency-injection spring-mvc autowired
我在一些帖子中读过,Spring MVC
并Portlets
建议不要进行现场注射.因为我试图得到一个所以我问自己我是否使用现场注射,我无法回答它.据我所知场注入是,如果你注入一个Bean
与一个属性@Autowired
是这样的:
CartController.java:
...
@Autowired
private Cart cart;
...
Run Code Online (Sandbox Code Playgroud)
BookshopConfiguartion.java:
@Configuration
public class BookShopConfiguration {
@Bean
public Cart cart(){
return new Cart();
}
//more configuration
Run Code Online (Sandbox Code Playgroud)
我Cart.java
习惯于在购物车中存储和提供有关书籍的信息.
在我的研究期间,我读到了构造函数注入:
MyComponent.java:
...
public class MyComponent{
private Cart cart;
@Autowired
public MyComponent(Cart cart){
this.cart = cart;
}
...
Run Code Online (Sandbox Code Playgroud)
这两种注射的优点和缺点是什么?
编辑1:由于此问题被标记为此问题的重复,我检查了它.因为在问题和答案中都没有任何代码示例,我不清楚我是否正确猜测我正在使用哪种注射类型.
Voj*_*cka 158
注射类型
如何将依赖项注入bean中有三种选择:
您正在使用选项3.这就是您@Autowired
直接在场上使用时发生的情况.
注射指南
Spring推荐的一般准则(参见基于构造函数的DI或基于Setter的DI部分)如下:
现场注射缺点
现场注射不赞成的原因如下:
结论
根据您的需要,您应该主要使用构造函数注入或构造函数和setter注入的混合.现场注入有许多缺点,应该避免.现场注入的唯一优点是写入更方便,这不会超过所有缺点.
进一步阅读
我写了一篇博客文章,说明为什么通常不推荐现场注入:字段依赖注入被认为是有害的.
Dan*_*ski 34
这是软件开发中永无止境的讨论之一,但业内主要影响者对该主题的看法越来越多,并开始建议将构造函数注入作为更好的选择.
构造函数注入
优点:
缺点:
基本上,现场注入是相反的.
die*_*ter 23
味道很重要.这是你的决定.
但我可以解释一下,为什么我从不使用构造函数注入.
我不希望实现我所有的构造@Service
,@Repository
和@Controller
豆类.我的意思是,大约有40-50个豆子或更多.每次如果我添加一个新字段,我都必须扩展构造函数.不,我不想要,我不需要.
如果您的Bean(服务或控制器)需要注入大量其他bean,该怎么办?具有8个参数的构造函数非常难看.
如果我使用CDI,构造函数不关心我.
编辑:Vojtech Ruzicka说:
class有太多依赖,可能违反单一责任原则,应该重构
是.理论与现实.这是一个示例:DashboardController
映射到单个路径*:8080/dashboard
.
我DashboardController
从其他服务中收集了大量信息,以便在仪表板/系统概述页面中显示它们.我需要这个单控制器.所以我必须只保护这一条路径(基本身份验证或用户角色过滤器).
归档时间: |
|
查看次数: |
47582 次 |
最近记录: |