1. 程式人生 > >Spring中,使用Java配置的方式進行依賴註入

Spring中,使用Java配置的方式進行依賴註入

context say 介紹 study 推薦 參數 str turn red

之前用spring的時候,只知道使用xml的方式,和使用註解的方式,卻一直不知道在spring中,還可以使用Java類的方式進行配置。使用Java類的方式,就可以取代xml和註解。使用Java配置是Spring4版本的推薦的配置方式,在spring boot中得到了很廣泛的應用,也是spring boot推薦的配置方式。

今天大概學習了一下,怎麽使用java配置的方式對spring進行配置來使用以來註入功能。

首先我們演示使用註解的方式配置spring,註解的一些功能全部以註釋的形式展示。Spring容器類選用AnnotationConfigApplicationContext。

  • 功能類1,FunctionService
package site.wangxin520.springstudy.dependency.injection;

import org.springframework.stereotype.Service;

//使用@service註解聲明當前的類,是spring管理的一個Bean
//可以根據需要,選擇@Component @Servie @Repository @Controller
@Service
public class FunctionService {
    
    /**
     * 返回一個字符串,在參數字符串前面加入hello,拼成一個新字符串
     * @param
word * @return */ public String sayHallo(String word){ return "hello "+word+" !"; } }
  • 功能類2,UseFunctionService
package site.wangxin520.springstudy.dependency.injection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserFuctionService { //@Autowired是自動註入的註解,將實例化好的FunctionService類註入到本類中的屬性。 @Autowired FunctionService functionService; public String sayHello(String word){ return functionService.sayHallo(word); } }
  • 配置類DiConfig
package site.wangxin520.springstudy.dependency.injection;

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

/**
 * 配置類
 * @author wangXgnaw
 *
 */
@Configuration//聲明當前類是一個配置類
@ComponentScan("site.wangxin520.springstudy")//相當於xml中配置到 掃描包
public class DiConfig {

}
  • Test測試類
package site.wangxin520.springstudy.dependency.injection;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Test {

    public static void main(String[] args) {

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DiConfig.class);

        UserFuctionService userFuctionService = context.getBean(UserFuctionService.class);
        String sayHello = userFuctionService.sayHello("小帥哥,快來玩呀");
        System.out.println(sayHello);
        
    }

}
  • 控制臺輸出為

技術分享

完全可以運行,而本例子中,沒有配置任何xml文件。


下面介紹另一種方式,不在類上面使用註解,而直接使用Java配置。

同樣,還是上面的列子,不過在新例子中,去掉了@Service和@AutoWired註解

  • FunctionService功能類1
package site.wangxin520.springstudy.javaconf;

public class FunctionService {

    public String sayHallo(String word){
        return "hello "+word+" !";
    }
}
  • UserFunctionService功能類2
package site.wangxin520.springstudy.javaconf;

public class UserFuctionService {

    FunctionService functionService;

    public void setFunctionService(FunctionService functionService) {
        this.functionService = functionService;
    }

    public String sayHello(String word) {
        return functionService.sayHallo(word);
    }

}
  • JavaConfig
package site.wangxin520.springstudy.javaconf;

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

@Configuration
//這裏註意的是,沒有使用包掃描的註解
public class JavaConfig {

    @Bean//使用Bean註解聲明當前方法的返回值是一個Bean,名稱就是方法名
    public FunctionService functionService(){
        return new FunctionService();
    }
    
    @Bean
    public UserFuctionService  userFuctionService(){
        //當使用userFunctionService時候,就會調用這個裏面的方法去獲取bean
        UserFuctionService userFuctionService=new UserFuctionService();
        userFuctionService.setFunctionService(functionService());
        return userFuctionService;
        
    }
    
    @Bean//這是另外一種註入的方式,直接使用參數註入的方式
    public UserFuctionService userFuctionService(FunctionService functionService){
        
        UserFuctionService userFuctionService=new UserFuctionService();
        userFuctionService.setFunctionService(functionService());
        return userFuctionService;
        
    }
    
}
  • Test
package site.wangxin520.springstudy.javaconf;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Test {

    public static void main(String[] args) {

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);

        UserFuctionService userFuctionService = context.getBean(UserFuctionService.class);
        String sayHello = userFuctionService.sayHello("小帥哥,快來玩呀");
        System.out.println(sayHello);
        
    }

}
  • 控制臺輸出

技術分享

表示,這個還沒有xml方便,不喜歡。

Spring中,使用Java配置的方式進行依賴註入