zoukankan      html  css  js  c++  java
  • Spring注解@Configuration和Java Config

    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两种配置方式,他们方式不同,但效果相同,可以根据自己的需要进行选择性配置。

  • 相关阅读:
    IsPostBack
    多次点击Button后DropDownList选中的值变为默认值?
    数据表数据的复制
    使用DriverManager获取数据库连接
    通过Driver获取数据库连接
    URL学习笔记
    使用UDP进行数据发送的实例一
    利用Socket 客户端---->服务端 传送文件到指定路径,并返回一个友好的回馈
    关于TCP的两个小练习_第一个博客~
    oracle-19c-单实例安装-一键式脚本
  • 原文地址:https://www.cnblogs.com/findbetterme/p/10758936.html
Copyright © 2011-2022 走看看