之前用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方便,不喜歡。