1. 程式人生 > >Spring實戰筆記二

Spring實戰筆記二

需要 can string類 xml配置 接口 情況 所在 system pre

一、Spring配置的方式

    spring容器用來創建應用程序中的bean,並通過DI來協調這些對象間的關系。

    在bean進行裝配時,spring提供了三種主要的裝配機制。

      ①在XML中進行顯式配置

      ②在Java中進行顯式配置

      ③隱式的bean發現機制和自動裝配

二、自動化裝配bean

    1、spring從兩個角度來實現自動化裝配

      ①組件掃描(component scanning):Spring會自動發現應用上下文中所創建的bean

      ②自動裝配(autowiring):Spring自動滿足bean之間的依賴

      示例:

        ①:定義一個接口

package soundsystem;

public interface CompactDisc {
    void play();
}

          ②創建實現類,並且加自動掃描的標簽@Component,該標簽會告知spring為這個類創建bean。

 1 package soundsystem;
 2 
 3 import org.springframework.stereotype.Component;
 4 
 5 @Component
 6 public class SgtPeppers implements CompactDisc {
7 8 public void play() { 9 System.out.println("繼承接口!"); 10 } 11 12 }

         ③組件掃描默認是不啟動的,我們需要顯示的配置Spring。讓它去尋找帶有@Component註解的類,並為其創建bean。

        方式一:Java代碼啟用組件掃描。

          如果沒有其他的配置,@ComponentScan默認會掃描與配置類相同的包,及其報下,所有子包。

package soundsystem;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan public class CDPlayerConfig { }

          方式二:通過XML配置來啟用組件掃描。

<context:component-scan base-package="soundsystem"/>

          ④:測試組件掃描能夠發現CompactDisc

package test;

import java.util.Date;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import soundsystem.CDPlayerConfig;
import soundsystem.SgtPeppers;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class TEST {    
    @Autowired
    private SgtPeppers sgtPeppers;
    
    @Test
    public void cdshouNotNull(){
        System.out.println("null");        
    }
    
}

    2、為組件掃描的bean命名

      Spring會自動將類名的第一個字母小寫,作為相應bean的名字。

      如果想要,自己為bean命名,則如下:

@Component("MyCd")
public class SgtPeppers implements CompactDisc {
    public void play() {
        System.out.println("繼承接口!");
    }

    3、設置組件掃描的基礎包

      @ComponentScan沒有任何屬性,它會以本包為基礎包,來掃描組件

      ①:@ComponentScan("包名")

        @ComponentScan(basePackages="包名")

        @ComponentScan(basePackages={"包名1","包名2",....})

        以上的包名為String類型,是類型不安全的。

      ②:@ComponentScan(basePackageClasses={bao1.class,bao2.class})

        通過這種方式,這些類所在的包會作為組件掃描的基礎包。

        在使用這種方式時,可以在包中創建一個用來掃描的空標記接口。

三、Java代碼裝配bean

    1、創建配置類,使用@Configuration標記。

package soundsystem;

import org.springframework.context.annotation.Configuration;

@Configuration
public class CDPlayerConfig {
}

    2、聲明bean,使用@Bean標記

      @Bean會告訴Spring這個方法將會返回一個對象,該對象要註冊為Spring應用上下文中的bean。

      默認情況下,bean的ID是和帶@Bean的方法名是一樣的,在下例中,bean的名字是sgtPepper。

      若想自己設置bean的名字,可以通過@Bean的name屬性:@Bean(name="xxxx")

package soundsystem;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CDPlayerConfig {
    
    @Bean
    public CompactDisc sgtPepper(){
        return new SgtPeppers();
    }
}

    3、借助JavaConfig實現註入

      Spring將會攔截所有對添加了@Bean標記的方法的調用,確保添加@Bean的方法只調用一次。

      使用@Bean標記的方法,可以使用任何的java方式來產生bean。

四:XML配置bean。

五:導入和混合配置

  1、JavaConfig中引用XML配置

    ①一個JavaConfig引用另一個JavaConfig,使用@Import(xxx.class)/@Import({xxx.class,yyy.class})

    ②一個JavaConfig引用XML配置,使用@ImportResource("classpath:xxx.xml")

  2、XML配置中引用JavaConfig

    應用<bean>標簽,將JavaConfig引入即可

<bean class="soundsystem.CDConfig">

    

      

Spring實戰筆記二