組件掃描:Spring能夠從classpath下自動掃描、偵測和實例化具有特定註解的組件。
特定組件包括:
—@Component:基本註解,標識了一個受Spring管理的組件
—@Respository:標識持久層組件
—@Service:標識業務層(服務層)組件
—@Controller:標識表現層組件
對於掃描的組件,Spring有默認的命策略:使用非限定名,第一個字母小寫。也可以通過註解中的value屬性標識組件的名稱 。
1、base-package屬性指定一個需要掃描的基礎類包,Spring容器會掃描這個基礎類包及其子包中的所有類,、
2、當需要掃描多個包時,可以使用逗號分隔
3、當需要掃描某個特定的類,而非所有,可以使用resource-pattern過濾特定的類(自己需要的類,就是過濾進來)
4、context:include-filter子節點標識包含的目標類,context:exclude-filter子節點標識排除哪些類
controller:
package annotation.controller;import org.springframework.stereotype.Controller;/** * @author chenpeng * @date 2018/6/2 15:21 */@Controllerpublic class UserController { public void execute(){ System.out.println("UserController execute...."); }}
service:
package annotation.service;import org.springframework.stereotype.Service;/** * @author chenpeng * @date 2018/6/2 15:20 */@Servicepublic class UserService { public void add(){ System.out.println("UserService add....."); }}
respository:
package annotation.respository;import org.springframework.stereotype.Repository;/** * @author chenpeng * @date 2018/6/2 15:19 */@Repositorypublic class UserImpl implements User { public void save() { System.out.println("save......"); }}
配置文件:
各個層之間的關聯關係
實際上
@Autowired和@Resource、@Inject註解的屬性
使用@Autowired自動裝配Bean:@Autowired註解自動裝配具有兼容類型的單個Bean的屬性
—構造器、普通字段,一切只有參數的方法都可以應用@Autowired註解
—默認情況下,所有使用@Autowired註解的屬性都需要被設置,當Spring找不到匹配的Bean裝配屬性時,會拋出異常。
若某一屬性允許不被設置,可以為@Autowired註解的required屬性設置為false
—
—
當有有多個類型相同的Bean被裝配的時候,若要不衝突:
1、在類的註解中加入特定的名字
2、注入的時候可以@Autowired和@Qualifier一起使用指定要注入的bean
除了@Autowired之外,還可以使用@Resource或@Inject來自動裝配,他們的功能和@Autowired相似,建議使用@Autowired
閱讀更多 Java高級架構技術 的文章