Spring 的 Java Config 配置

Spring 的 Java Config 配置

从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>

等效于:

//@Configuration告诉 Spring,这是核心的 Spring 配置文件,并通过 @Bean 定义 bean
@Configuration    
public class AppConfig {
    @Bean(name="helloBean")
    public HelloWorld helloWorld() {
        return new HelloWorldImpl();
    }
}

@Import

在一个大的项目结构,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

以上等效的 Java Config方式的配置如下:

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);
}
    }
  1. @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();
}
    }
  1. @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 {

}
  1. 执行程序

加载主配置文件,并进行测试。

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

猜你喜欢

转载自blog.csdn.net/qq_38928944/article/details/82218126