gpt4 book ai didi

spring - @autowired 与新 key ?

转载 作者:行者123 更新时间:2023-12-04 01:49:38 25 4
gpt4 key购买 nike

使用 @Autowired 有什么区别?注释和 new key ?
让我们在一个类(class)里有什么区别:

@Autowired private UserDao userdao;


private UserDao userDao = new UserDaoImpl();

对性能有影响吗?

最佳答案

除了其他人已经提到的低耦合之外,主要区别在于 new接近,每次你都会得到一个新对象 ,不管你想不想。即使UserDaoImpl是可重用的、无状态的和线程安全的(DAO 类应该努力做到这一点),你仍然会在每个需要它们的地方创建它们的新实例。

起初这可能不是一个大问题,但考虑到对象图的增长 - UserDaoImpl也许需要一个 Hibernate session ,它需要一个 DataSource,它需要一个 JDBC 连接——它很快就变成了许多必须一遍又一遍地创建和初始化的对象。当您依赖 new在您的代码中,您还将初始化逻辑分布在很多地方。就像在这个例子中一样,你需要在你的 UserDaoImpl 中有代码来打开一个带有正确参数的 JDBC 连接,但是所有其他的 DAO 类都必须做同样的事情。

这就是控制反转 (IoC) 的用武之地。它旨在通过将对象创建和生命周期与对象绑定(bind)和使用解耦来解决这些问题。 IoC 最基本的应用是一个简单的工厂类。更复杂的方法是依赖注入(inject),例如 Spring。

对性能有影响吗?

是的,但它很可能不会很重要。使用 Springs 依赖注入(inject)会在启动时花费更多,因为必须初始化容器并设置所有托管对象。但是,由于您不会创建托管对象的新实例(假设您是这样设计它们的),因此您将从更少的 GC 负载和更少的对象创建中获得一些运行时性能。

但是,您的最大收获将在于应用程序的可维护性和健壮性。

关于spring - @autowired 与新 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12849561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com