小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Spring 注解配置(2)

 神志屋 2017-10-11

版權(quán)聲明:本文為博主原創(chuàng)文章,如需轉(zhuǎn)載請(qǐng)標(biāo)注轉(zhuǎn)載地址。 博客地址:http://www.cnblogs.com/caoyc/p/5626365.html 

@Autowired 注釋,它可以對(duì)類成員變量、方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注,完成自動(dòng)裝配的工作。 通過 @Autowired的使用來消除 set ,get方法。在使用@Autowired之前,我們對(duì)一個(gè)bean配置起屬性時(shí),是這用用的

<property name="屬性名" value=" 屬性值"/>    

通過這種方式來,配置比較繁瑣,而且代碼比較多。在Spring 2.5 引入了 @Autowired 注釋

 

下面用案例來具體說明

UserRepository.java

1 package com.proc.bean.repository;
2 
3 public interface UserRepository {
4     
5     void save();
6 }

這里定義了一個(gè)UserRepository接口,其中定義了一個(gè)save方法

 

UserRepositoryImps.java

復(fù)制代碼
 1 package com.proc.bean.repository;
 2 
 3 import org.springframework.stereotype.Repository;
 4 
 5 @Repository("userRepository")
 6 public class UserRepositoryImps implements UserRepository{
 7 
 8     @Override
 9     public void save() {
10         System.out.println("UserRepositoryImps save");
11     }
12 }
復(fù)制代碼

定義一個(gè)UserRepository接口的實(shí)現(xiàn)類,并實(shí)現(xiàn)save方法,在這里指定了該bean在IoC中標(biāo)識(shí)符名稱為userRepository

 

UserService.java

復(fù)制代碼
 1 package com.proc.bean.service;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Service;
 5 
 6 import com.proc.bean.repository.UserRepository;
 7 
 8 @Service
 9 public class UserService {
10 
11     @Autowired
12     private UserRepository userRepository;
13     
14     public void save(){
15         userRepository.save();
16     }
17 }
復(fù)制代碼

這里需要一個(gè)UserRepository類型的屬性,通過@Autowired自動(dòng)裝配方式,從IoC容器中去查找到,并返回給該屬性

 

applicationContext.xml配置

<context:component-scan base-package="com.proc.bean" />

 

測(cè)試代碼:

1 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
2 
3 UserService userService=(UserService) ctx.getBean("userService");
4 userService.save();

輸出結(jié)果:UserRepositoryImps save

 

那么使用@Autowired的原理是什么?

  其實(shí)在啟動(dòng)spring IoC時(shí),容器自動(dòng)裝載了一個(gè)AutowiredAnnotationBeanPostProcessor后置處理器,當(dāng)容器掃描到@Autowied、@Resource或@Inject時(shí),就會(huì)在IoC容器自動(dòng)查找需要的bean,并裝配給該對(duì)象的屬性

 <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>  

  

 注意事項(xiàng):

  在使用@Autowired時(shí),首先在容器中查詢對(duì)應(yīng)類型的bean

    如果查詢結(jié)果剛好為一個(gè),就將該bean裝配給@Autowired指定的數(shù)據(jù)

    如果查詢的結(jié)果不止一個(gè),那么@Autowired會(huì)根據(jù)名稱來查找。

    如果查詢的結(jié)果為空,那么會(huì)拋出異常。解決方法時(shí),使用required=false

 

舉例說明:

 在上面例子中,我們?cè)诙ㄒ粋€(gè)類來實(shí)現(xiàn)UserRepository接口

復(fù)制代碼
package com.proc.bean.repository;

import org.springframework.stereotype.Repository;

@Repository
public class UserJdbcImps implements UserRepository {

    @Override
    public void save() {
        System.out.println("UserJdbcImps save");
    }
}
復(fù)制代碼

  這時(shí)在啟動(dòng)容器后,在容器中有兩個(gè)UserRepository類型的實(shí)例,一個(gè)名稱為userRepository,另一個(gè)為userJdbcImps。在UserService中

@Autowired
private UserRepository userRepository;

  輸出結(jié)果:UserRepositoryImps save

  這里由于查詢到有兩個(gè)該類型的實(shí)例,那么采用名稱匹配方式,在容器中查找名稱為userRepository的實(shí)例,并自動(dòng)裝配給該參數(shù)。

 

  如果這里想要裝載userJdbcImps的實(shí)例,除了將字段userRepository名稱改成userJdbcImps外,可以提供了一個(gè)@Qualifier標(biāo)記,來指定需要裝配bean的名稱,代碼這樣寫

1 @Autowired
2 @Qualifier("userJdbcImps")
3 private UserRepository userRepository;

輸出結(jié)果:UserJdbcImps save

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多