Spring配置方式

Spring配置方式

第一階段:xml配置

    在spring 1.x時代,使用spring開發滿眼都是xml配置的bean,隨着項目的擴大,
咱們須要把xml配置文件分放到不一樣的配置文件中,那時候須要頻繁地在開發的類和配置文件間切換。java

第二階段:註解配置

    在spring 2.x時代,隨着JDK1.5帶來的註解支持,spring提供了聲明bean的註解,
大大減小了配置量。這時spring圈子存在一種爭論:註解配置和xml配置究竟哪一個更好?咱們最終的選擇是應用
的基本配置用xml,業務配置用戶註解。spring

第三階段:Java配置

    從spring 3.x到如今,spring提供了Java配置的能力,使用Java配置更好的理解
配置的bean。spring 4.x和spring boot都推薦使用Java配置。this

Java配置

Java配置經過@Configuration和@Bean來實現。

  • @Configuration聲明當前類是一個配置類,至關於一個spring配置的xml文件
  • @Bean註解在方法上,聲明當前方法的返回值爲一個Bean。

示例

1. 編寫一個功能類的Bean

public class FunctionService{
    
    public String sayHello(String word){
        return "hello "+ word + " !";
    }
    
}

此處沒有使用@Service聲明爲Beancode

2. 使用功能類的Bean

// 1
public class UseFunctionService{
    @Autowired // 2
    FunctionService functionService;
    
    public void setFunctionService(FunctionService functionService){
        this.functionService = functinService;
    }
    
    public String SayHello(String word){
        return functionService.sayHello(word);
    }
}
代碼解釋
  1. 此處沒有使用@Service聲明Bean
  2. 自動注入Bean

3. 配置類

@Configuration // 1
public class JavaConfig{
    
    @Bean // 2
    public FunctionService functionService(){
        return new FunctionService();
    }
    
    @Bean
    public UseFunctionService useFunctionService(){
        UserFunctionService useFunctionService = new UseFunctionService();
        useFunctionService.setFunctionService(functionService()); // 3 爲UseFunctionService注入functionService
        return useFunctionService;
    }
}
代碼解釋
  1. 使用@Configuration註解表示當前類是一個配置類,這意味着這個類裏可能有0個或者多個@Bean註解,此處沒有使用包掃描,是由於全部的Bean都在此勒種定義。
  2. 使用@Bean註解聲明當前方法FunctionService的返回值是一個Bean,Bean的名稱是方法名。
  3. 注入functionService的Bean時候直接調用functionService()方法。另一種注入的方式,直接將functionService做爲參數給useFunctionService(),這也是spring容器提供的極好的功能。在spring容器中只要存在某個bean,就能夠在另外的bean的聲明方法的參數注入。
@Bean
public UseFunctionService useFunctioinService(FunctionService functionService){
    UserFunctionService useFunctionService = new UseFunctionService();
    useFunctionService.setFunctionService(functionService);
    return useFunctionService;
}

4. 運行

public class Main{
    public static void main(String[] args){
        // 使用註解配置工廠類,指定加載的配置類
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
        
        UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);
        System.out.println(useFunctionService.SayHello("java config"));
        context.close();
    }
}

不管是xml配置、註解配置仍是Java配置,都被稱做元數據,所謂元數據即描述數據的數據。元數據自己不具有任何可執行的能力,
只能經過外界的代碼來對這些元數據行進行解析後再進行一些有意義的操做。Spring容器解析這些配置元數據進行Bean初始化、配
置和管理依賴。xml

聲明Bean的註解有:開發

  • @Component,沒有明確的角色
  • @Service 在業務邏輯層使用
  • @Repository 在數據訪問層(dao層)使用
  • @Controller 在展示層使用

注入Bean的註解,通常狀況下通用:get

  • @Autowired, Spring提供的註解
  • @Inject, JSR-330提供的註解
  • @Resource, JSR-250提供的主機

以上三個註解均可註解在set方法或者屬性上。it

相關文章
相關標籤/搜索