Spring(九)Spring的javaConfig配置

博客介绍了从Spring 3起,JavaConfig功能包含在Spring核心模块,Spring 3以后版本支持xml和JavaConfig两种配置方式。还给出了JavaConfig配置示例,如用@Configuration注释表明核心配置文件,用@Bean定义bean,以及传统xml加载多配置文件与JavaConfig的等效方式。

(1)Spring的javaconfig配置
从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>

等效于:

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)示例
1、bean

public interface Helloeorld {

    void printHelloWorld(String msg);
}

public class HelloworldImpl implements Helloeorld{

    @Override
    public void printHelloWorld(String msg) {

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

}

2、javaConfig注解:使用 @Configuration 注释告诉 Spring,这是核心的 Spring 配置文件,并通过 @Bean 定义 bean

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();
        
    }
}

测试main方法:

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");
}

}

@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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值