Java開(kāi)發(fā)中常用的兩個(gè)概念就是依賴注入和自動(dòng)裝配,它們都是為了在開(kāi)發(fā)中降低代碼耦合度。
依賴注入作為一種設(shè)計(jì)模式,它的主要作用是通過(guò)把自己需要用到的其他對(duì)象(即依賴)通過(guò)構(gòu)造函數(shù)、屬性或者方法調(diào)用的形式注入到自己之中。這樣的好處是可以使得代碼之間的依賴關(guān)系更加松散,以便于擴(kuò)展和維護(hù)。比如下面的代碼:
public class UserDAOImpl implements UserDAO { private DBUtil dbUtil; public UserDAOImpl(DBUtil dbUtil) { this.dbUtil = dbUtil; } public void save(User user) { Connection conn = dbUtil.getConnection(); // ... dbUtil.close(conn); } }
在上面的代碼中,我們通過(guò)構(gòu)造函數(shù)的方式注入了一個(gè)DBUtil對(duì)象,這個(gè)對(duì)象是在UserDAOImpl之外實(shí)例化的。由于我們把需要用到的依賴(即DBUtil)注入到了UserDAOImpl之中,從而達(dá)到了松散耦合的目的。
自動(dòng)裝配也是為了降低代碼耦合度而產(chǎn)生的概念,它的主要作用是讓Spring框架幫助我們自動(dòng)地把需要注入的依賴對(duì)象注入到我們的程序之中。比如下面的代碼:
@Component public class UserServiceImpl implements UserService { @Autowired private UserDAO userDAO; public void save(User user) { userDAO.save(user); } }
在上面的代碼中,我們使用了@Component注解標(biāo)識(shí)了UserServiceImpl這個(gè)類,這告訴Spring框架它是一個(gè)Bean。我們?cè)赨serDAO類型的變量上使用了@Autowired注解,這告訴Spring框架需要自動(dòng)注入一個(gè)UserDAO類型的對(duì)象到這個(gè)變量中。這種方式雖然簡(jiǎn)單,但是需要注意的是要對(duì)@Autowired注解的位置和使用有一個(gè)比較準(zhǔn)確的理解。