一、configuration註解的作用
在Spring框架中,configuration註解被廣泛用於定義配置類,用來取代傳統的XML配置文件。同時,這個註解也可以在一個類中定義多個@Bean註解的方法,對這些方法進行統一管理。
配置類中的每個@Bean方法都會在Spring容器中生成一個bean實例,並且這些實例會被自動注入到需要它們的地方,例如其他的@autowired註解的成員變數。
二、註解configuration作用
用@Configuration註解的類,等價於XML中配置spring容器的標籤。@Bean註解等價於XML中配置標籤。
事實上,在內部實現中,@Configuration註解使用了@Component註解,將這個類的實例交給了Spring容器進行管理。
三、configuration註解什麼意思
configuration註解通常用來標識一個Java類為Spring的配置類。在這個類中,我們可以定義一些bean,這些bean將被註冊到Spring容器中,供其他地方使用。
除此之外,配置類也可以與其他的@Configuration註解的類共同組成一個更複雜的配置環境。
四、@configuration註解
@Configuration註解可以用在類上,只要有這個註解的類,就被視為Spring配置類,而且可以通過@componentScan自動掃描到。同時,這個註解也可以用在方法上,表示這個方法返回的實例也是需要交給Spring容器管理的。
下面是一個經典的@Configuration註解的使用示例:
@Configuration public class AppConfig { @Bean public TransferService transferService() { return new TransferServiceImpl(); } }
在這裡,我們定義了一個TransferService的bean,並通過@Bean註解表示,這個方法的返回值會被自動註冊到Spring容器中。注意,這個方法的命名規範也相應的與bean的命名規範有關,例如這裡的transferService()方法,自動生成了名字為transferService的bean。
五、configurable註解
@configurable註解不同於之前的@Configuration註解,它的主要作用是自動為一個普通對象進行依賴注入,而不是像@Configuration註解一樣,用來標識類。
這個註解通常用來為一些無法交給Spring容器管理的對象進行自動註冊、擴展依賴注入的能力。下面是使用@configured註解進行依賴注入的例子:
@Configurable public class Circle { @Autowired private Point center; @Override public String toString(){ return "Circle[" + center + "]"; } }
在這裡,我們定義了一個普通類Circle,並將這個類標記為@configurable,同時,我們還在這個類中使用了@Autowired註解來對它的私有成員變數進行依賴注入。這個例子說明,使用了@configurable註解之後,我們可以將普通對象當作bean來進行處理。
六、configuration啥意思
configuration實際上代表Java配置類的本質,Java配置類就是負責與Spring容器進行交互的Java類。這個類裡面通常會包含一些@Bean註解的方法,每個方法都返回一個在容器中管理的bean實例。
Java配置類主要的作用是解耦,將配置直接寫在Java代碼中,避免了XML配置太多、易錯的問題,同時便於調試與重構。
七、configuration註解不起作用
如果使用@Configuration註解時發現無法識別,可能是因為缺少依賴的原因。應該在pom文件中引入spring-context包,並保證這個包的版本與環境中安裝的Spring版本一致。
同時,如果將@Configuration註解用在一個非public的類上,也可能會無法被Spring容器識別。需要將這個類設為public。
八、configuration註解載入順序
在Spring中,所有的@Configuration註解的類都可以彼此導入、組合使用。在導入時,這些類會以某種順序被Spring容器載入。
Spring的@Configuration註解載入順序可以簡單歸納為:@Import、@Bean(包括@Bean的初始化函數)、普通@Bean、@Configuration
在這個順序中,Spring容器首先會載入被@Import註解導入的@Configuration註解類,然後按照@Bean的順序依次註冊每個bean。最後,Spring容器會掃描剩餘的@Configuration註解中定義的bean。
九、configuration註解參數
@Configuration註解有一個可選的參數proxyBeanMethods,這個參數的默認值是true。如果將這個參數設為false,Spring就不會為這個配置類生成代理類,這樣做可能會提高應用的執行效率。
下面是一個使用proxyBeanMethods參數的例子:
@Configuration(proxyBeanMethods = false) public class AppConfig { @Bean public TransferService transferService() { return new TransferServiceImpl(); } }
十、configuration註解的類怎麼調用
Spring的Java配置類可以通過載入到Spring容器中實現被調用。我們可以通過兩種方式實現這個過程:
方式一:用AnnotationConfigApplicationContext註冊配置類
public static void main(String[] args) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(AppConfig.class); ctx.refresh(); TransferService transferService = ctx.getBean(TransferService.class); transferService.transfer(); }
方式二:在web.xml中註冊DispatcherServlet,並指定@Configuration註解的類
public class MyWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class[] getRootConfigClasses() { return new Class[] { AppConfig.class }; } }
這種方式適用於Spring應用是基於Servlet的情況,例如Spring MVC。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/183846.html