1. 程式人生 > >Spring中@Configuration註解使用

Spring中@Configuration註解使用

 

 

在Spring中使用@Configuration註解載入JavaConfig配置-zifangsky的部落格備份-51CTO部落格  
http://blog.51cto.com/983836259/1889610

 

如題所示,從一些翻譯至國外的書籍中可以看到,一些西方人喜歡使用沒有XML檔案的純粹的JavaConfig配置。但是一方面在國內我們通常都習慣使用XML檔案來配置SpringMVC、Ehcache、Shiro等元件的具體引數配置,另一方面我個人認為適當使用基於XML檔案的配置是可以有效減少配置檔案的程式碼量的。因此,如果想要在專案中載入一部分的JavaConfig應該如何做呢?

(1)新建一個測試用例:

package cn.zifangsky.config;

import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import cn.zifangsky.model.User;

@Configuration
public class UserConfig {
	
	@Bean(autowire=Autowire.BY_NAME,name="u")
	public User user(){
		return new User("root","123456");
	}

}

這裡使用了@Configuration註解表明這個類是一個配置類,同時使用了@Bean定義了一個名為“u”的User型別的bean

(2)在Spring的配置檔案中新增需要自動掃描這個包中的註解:

<context:component-scan base-package="cn.zifangsky.config" />

這裡也就是“cn.zifangsky.config”這個包

(3)測試Controller:

package cn.zifangsky.controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.zifangsky.model.User;

@Controller
public class TestController {
	@Resource(name="u")
	User user;
	
	@RequestMapping("/test.html")
	public void test(){
		System.out.println("測試name:" + user.getName());
	}
	
}

可以看到,這裡使用的@Resource註解按名字“u”注入了之前定義好的bean

(4)測試:

啟動專案後訪問:http://localhost:8080/Demo/test.html

控制檯輸出如下:

測試name:root

 這麼做有什麼好處呢?

     1.使用純java程式碼,不在需要xml

     2.在配置中也可享受OO帶來的好處

     3.型別安全對重構也能提供良好的支援

     4.依舊能享受到所有springIoC容器提供的功能

 

 

 

 

=============================================================

=============================================================

=============================================================

 

 

 

使用@Configuration註解來代替Spring的bean配置

下面是一個典型的Spring配置檔案(application-config.xml):

1

2

3

4

5

6

7

8

<beans

        <bean id="orderService" class="com.acme.OrderService"/> 

                <constructor-arg ref="orderRepository"/> 

        </bean

        <bean id="orderRepository" class="com.acme.OrderRepository"/> 

                <constructor-arg ref="dataSource"/> 

        </bean

</beans

  然後你就可以像這樣來使用是bean了:

1

2

ApplicationContext ctx = new ClassPathXmlApplicationContext("application-config.xml"); 

OrderService orderService = (OrderService) ctx.getBean("orderService"); 

  現在Spring Java Configuration這個專案提供了一種通過java程式碼來裝配bean的方案:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@Configuration 

public class ApplicationConfig { 

   

        public @Bean OrderService orderService() { 

                return new OrderService(orderRepository()); 

        

   

        public @Bean OrderRepository orderRepository() { 

                return new OrderRepository(dataSource()); 

        

   

        public @Bean DataSource dataSource() { 

                // instantiate and return an new DataSource … 

        

  然後你就可以像這樣來使用是bean了:

1

2

JavaConfigApplicationContext ctx = new JavaConfigApplicationContext(ApplicationConfig.class); 

OrderService orderService = ctx.getBean(OrderService.class);

  

 這麼做有什麼好處呢?

     1.使用純java程式碼,不在需要xml

     2.在配置中也可享受OO帶來的好處

     3.型別安全對重構也能提供良好的支援

     4.依舊能享受到所有springIoC容器提供的功能