Spring重溫(二)--Spring JavaConfig


1.從Spring 3起,JavaConfig功能已經包含在Spring核心模塊,它允許開發者將bean定義和在Spring配置XML文件到Java類中。但是,仍然允許使用經典的XML方式來定義bean和配置,JavaConfig是另一種替代解決方案。所以,在Spring3以后的版本中,支持xml方式和javaConfig兩種Spring配置方式。

我們通過XML方式定義:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
    <bean id="helloBean" class="com.yiibai.hello.impl.HelloWorldImpl">
        
</beans>

等效於:

package com.yiibai.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.yiibai.hello.HelloWorld;
import com.yiibai.hello.impl.HelloWorldImpl;

@Configuration
public class AppConfig {
    
    @Bean(name="helloBean")
    public HelloWorld helloWorld() {
        return new HelloWorldImpl();
    }
    
}

 2.小例子:

a.一個簡單的bean

package com.spring;

public interface Helloeorld {

    void printHelloWorld(String msg);
}
package com.spring;

public class HelloworldImpl implements Helloeorld{

    @Override
    public void printHelloWorld(String msg) {

        System.out.println("Hello : " + msg);
    }

}

b.javaConfig注解:使用 @Configuration 注釋告訴 Spring,這是核心的 Spring 配置文件,並通過 @Bean 定義 bean

package com.spring;

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

/*使用 @Configuration 注釋告訴 Spring,這是核心的 Spring 配置文件,
並通過 @Bean 定義 bean*/
@Configuration
public class TestConfig {

    @Bean(name="helloeorld")
    public Helloeorld getHello(){
        return new HelloworldImpl();
        
    }
}

c.測試main方法:

package com.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class TestMain {
    
public static void main(String[] args) {
       ApplicationContext context = new AnnotationConfigApplicationContext(TestConfig.class);
       Helloeorld obj = (Helloeorld) context.getBean("helloeorld");
        
       obj.printHelloWorld("Spring Java Config");
}

}

3.@Import

在我們運用傳統xml方式進行配置Spring時,可以通過如下方式加載多個配置文件:

在一個大的項目結構,Spring bean配置文件位於不同的文件夾以便於維護和模塊化。例如,Spring-Common.xml在common 文件夾中,Spring-Connection.xml 在connection文件夾,Spring-ModuleA.xml在ModuleA 文件夾等等。
你可以加載多個Spring bean的配置文件如下代碼中:
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Common.xml",
              "Spring-Connection.xml","Spring-ModuleA.xml"});
把所有的 Spring XML 文件放入在項目類路徑中。
    project-classpath/Spring-Common.xml
    project-classpath/Spring-Connection.xml
    project-classpath/Spring-ModuleA.xml
解決方法
以上方法是缺乏組織並且很容易出錯,更好的辦法應組織所有的Spring bean 配置文件到一個XML文件。例如,創建一個Spring-All-Module.xml文件,並導入整個Spring bean的文件如下:
File : Spring-All-Module.xml
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <import resource="common/Spring-Common.xml"/>
    <import resource="connection/Spring-Connection.xml"/>
    <import resource="moduleA/Spring-ModuleA.xml"/>    
</beans>
現在,可以加載一個這樣的 XML 文件:

 
ApplicationContext context =  new ClassPathXmlApplicationContext(Spring-All-Module.xml);
將這個文件放入項目的類路徑。
project-classpath/Spring-All-Module.xml

以上方式等效於javaConfig的如下方式:


1.兩個簡單的Spring bean。
File One : CustomerBo.java

package com.yiibai.core;

public class CustomerBo {

    public void printMsg(String msg) {

        System.out.println("CustomerBo : " + msg);
    }

}

File Two: SchedulerBo.java
package com.yiibai.core; public class SchedulerBo { public void printMsg(String msg) { System.out.println("SchedulerBo : " + msg); } }
2. @Configuration示例 現在,使用JavaConfig @Configuration聲明上述Bean類。 File One: CustomerConfig.java package com.yiibai.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.yiibai.core.CustomerBo; @Configuration public class CustomerConfig { @Bean(name="customer") public CustomerBo customerBo(){ return new CustomerBo(); } }

File Two: SchedulerConfig.java
package com.yiibai.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.yiibai.core.SchedulerBo; @Configuration public class SchedulerConfig { @Bean(name="scheduler") public SchedulerBo suchedulerBo(){ return new SchedulerBo(); } } 3. @Import示例 使用@Import加載多個配置文件。 File : AppConfig.java package com.yiibai.config; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import({ CustomerConfig.class, SchedulerConfig.class }) public class AppConfig { }
4. 執行程序 加載主配置文件,並進行測試。 package com.yiibai.core; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import com.yiibai.config.AppConfig; public class App { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext( AppConfig.class); CustomerBo customer = (CustomerBo) context.getBean("customer"); customer.printMsg("Hello 11"); SchedulerBo scheduler = (SchedulerBo) context.getBean("scheduler"); scheduler.printMsg("Hello 22"); } } 輸出結果 CustomerBo : Hello 11 SchedulerBo : Hello 22

 

總結:Spring有xml和javaConfig兩種配置方式,他們方式不同,但效果相同,可以根據自己的需要進行選擇性配置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM