java之Spring(IOC)注解裝配Bean詳解


在這里我們要詳細說明一下利用Annotation-注解來裝配Bean。

因為如果你學會了注解,你就再也不願意去手動配置xml文件了,下面就看看Annotation的魅力所在吧。

先來看看之前的bean注解裝配例子:

package com.eco.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.eco.dao.UserDao;
import com.eco.model.User;
@Service public class Userservice {
    //@Autowired
    private UserDao userdao;

    public void setUserdao(UserDao userdao) {
        this.userdao = userdao;
    }

    public void useradd(User newuser) {
        userdao.adduser(newuser);
    }
}
package com.eco.daoimp;
import org.hibernate.Session;
import org.hibernate.Transaction;import org.springframework.stereotype.Repository;
import com.eco.hibernate.HibernateSessionFactory;
import com.eco.dao.UserDao;
import com.eco.model.User;
@Repository
public class Usertodo1 implements UserDao {
    public void adduser(User user) {
        Session session = HibernateSessionFactory.getSession();
        Transaction transaction = session.beginTransaction();
        session.save(user);
        transaction.commit();
        session.close();
        System.out.println("todo1 create the user");
    }
}

由於這里只是講注解,為了讓代碼看得更加清晰,就省略了方法內部的注釋。

1.組件注解

@controller 控制器(注入服務)

@service 服務(注入dao)

@repository dao(實現dao訪問)

@component (泛指組件,當組件不好歸類的時候,我們可以使用這個注解進行標注。)

其實在Annotation設計之初,是定義了四個組件注解的,每個組件注解聲明該組件的功能,但是由於某種原因,這些設計

思想並未真正實現,以至於上面的四個組件注解都是一樣的,沒有任何區別;

所以當你搞不清當前要注解的類到底是dao層,service層,還是controller層時,建議使用@component注解;

或者說所有組件類都用@component注解,不然,萬一dao層類你用了@service注解,雖然代碼能夠正常運行,但是明眼

人一看就知道你不專業,連dao層和service層都搞不清。

2.Autowired注解

采用@Autowired注解的成員變量、setter方法、構造方法(對應依賴注入的接口注入、setter注入、構造器注入),會讓

Spring去做一件事:去所有@component注解的類里面找和我類型相同的,並裝配到bean中,它默認是byType的,所以

如果你為多個與之類型相同的類注解了@component,那么Spring就說:我找到了好多和你類型相同的,這下該怎么辦啊。

然后華麗麗地報錯了。

所以我們建議在使用組件注解時給它起個名字,方式為@component("eco"),如果不自定義的話,Spring默認為組件起個

名字,這個名字就是該組件類名首字母小寫。

那么在@Autowired(name="eco"),這樣顯式地聲明注入的組件名稱為eco,就不會出錯了,但是你別故意注入一個類型不

匹配的,那就沒意思了。

3.Resource注解

@Resource是一個比@Autowired注解功能更強大的注解,並且更易於理解;

@Autowired(name="eco")========@Resource(name="eco"),這兩種注解功能是一樣的,都能實現往此處注入一個名為

eco的類(資源)。

如此一來,就可以實現幾個注解來實現xml文件手動裝配bean的的功能了。

組件使用@Component注解,需要注入依賴(資源)就使用@Resource注解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM