0
点赞
收藏
分享

微信扫一扫

spring new和@autowired的区别


​​welcome to my blog​​

作为刚入门的新手, 今天突然想到一个问题, 使用@autowired注解注入一个类, 哪里体现了低耦合? 不还是得输入类的名字吗? 这不就跟new差不多嘛

使用@autowired注解怎样体现解耦和?

@autowired注入一个对象时, 使用该类实现的接口名即可, 但是如果使用new创建一个实例的话, 必须指明具体的实现类, 例子如下

比如有个访问数据库的接口AlphaDao

public interface AlphaDao {
String select();
}

AlphaDao对应的具体实现类

import org.springframework.stereotype.Repository;

@Repository
public class AlphaDaoMyBatisImpl implements AlphaDao {
@Override
public String select() {
return "MyBatis";
}
}

当我们在业务层访问数据库时, 可以注入AlphaDao, 并不用指明具体的实现类的类名, 这就体现了低耦合. 另一个好处就是改用其它的实现类的话, 也不用修改源代码, 很好地体现了开闭原则

@Autowired
private AlphaDao alphaDao;

如果使用new创建一个实例, 那么必须指明具体的实现类. 日后要是改用其它的实现类的话, 就得修改源代码, 这破坏了"开闭原则"中的"对修改封闭". 更不幸的是, 如果源代码中有100处new, 那么就得手动修改100个地方…

private AlphaDao alphaDao = new AlphaDaoMyBatisImpl();

使用@autowired的另外一个优势: 避免重复创建实例

@autowired注入一个对象, 可以重复使用. 打个比方, 如果业务层有两个类都用到了用一个类, 此时使用new的话得创建两个对象实例, 但是使用@autowired注入的对象可以在不同的类之间使用, 这就避免创建重复的对象, 也就减轻了垃圾回收(GC)的压力

​​参考​​


举报

相关推荐

0 条评论