【问题标题】:Different between Autowired Services and Objects Spring MVC自动装配服务和对象 Spring MVC 之间的区别
【发布时间】:2012-06-24 22:42:46
【问题描述】:

我想知道创建一个新类和使用@Autowired 注解注入它和创建一个类并获取这个类的对象并使用它的方法之间有什么区别。是否有任何技术原因(即访问速度更快等)?

服务案例:

 @Service
 public class AuthorService implements AuthorServiceInterface {


   //some methods
 }

简单类案例:

 public class AuthorService implements AuthorServiceInterface {


   //some methods
 }

如果我想调用另一个班级的第一个,我必须写:

public Class myclass{

    @Autowired
    AuthorService authorservice;


} 

在第二种情况下,我必须写:

public Class myclass{


    AuthorService authorservice = new AuthorService():

} 

这两种情况有什么区别?

【问题讨论】:

  • 你能解释一下你所说的两个代码 sn-ps 是什么意思吗?
  • @JB Nizet 我更新了我的答案。
  • @Nick Robertson 因为您想利用 spring dependency injection 为您创建对象。使用@Autowired 肯定会更好看。更松散耦合和高内聚的代码。
  • 请看这个答案,stackoverflow.com/questions/131975/… 和红色 20 分钟前 JB Nizets 回答差不多。对不起,我必须离开没有时间写示例

标签: spring-mvc


【解决方案1】:

第一个 sn-p 使用依赖注入,第二个没有。依赖注入允许

  • 将 MyClass 从 AuthorService 的具体实现中解耦,这将允许根据环境切换实现,例如
  • 使用单例(或会话范围或请求范围)AuthorService,而不是每次都重新实例化一个
  • 在对 MayClass 进行单元测试时注入模拟 AuthorService 实现
  • 在具体的 AuthorService 实例周围注入一个代理,这可以
    • 验证授权
    • 在每个方法调用之前启动一个事务并在方法调用之后提交/回滚它
    • 记录方法调用
    • 测量方法所花费的时间并计算统计数据
    • 使用 RMI 或 HttpInvoker 在另一台机器上调用 AuthorService
    • ...

请注意,您应该在 MyClass 中自动装配 AuthorServiceInterface,而不是 AuthorService。

【讨论】:

  • 我明白你的回答。我现在想问,如果我使用第一种方法,过程会变得更快吗?
  • @Nick Robertson 可能是简短的回答。但这是微优化,而且如果项目变得足够大,维护它可能会很忙。
  • @ant 你说“维护它可能很忙”是什么意思?
  • 它可能会变得更快。但是性能并不是你使用依赖注入的原因。无论如何,这不是典型应用程序中需要时间的地方。专注于 IO、数据库查询、进程间调用、复杂算法。
猜你喜欢
  • 2015-12-31
  • 2013-04-29
  • 2018-03-24
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 2012-12-11
  • 2023-02-10
  • 2020-12-04
相关资源
最近更新 更多