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

Spring重温(二)--Spring JavaConfig的更多相关文章

  1. Spring MVC(二)--Spring MVC登陆实例

    本文通过一个简单的登陆实例实现Spring MVC的流程,同时整合 MyBatis使用,流程是这样的: 1.访问一个URL进入登陆界面 2.输入正确的用户名和密码,成功则进入index页面,否则留在登 ...

  2. Spring重温(四)--Spring自动组件扫描

    通常情况下,声明所有的Bean类或组件的XML bean配置文件,这样Spring容器可以检测并注册Bean类或组件. 其实,Spring是能够自动扫描,检测和预定义的项目包并实例化bean,不再有繁 ...

  3. Spring重温(三)--Spring依赖注入(DI)

    前言:在Spring框架中,DI(依赖注入)是用来定义对象彼此间的依赖,主要有set方法注入和构造器注入两种方式.另外,当一个类包含多个构造函数带的参数相同,它总是会造成构造函数注入参数类型歧义的问题 ...

  4. Spring重温(一)--Spring快速入门

    1.spring官网(https://repo.spring.io)下载依赖jar. 2.配置spring环境时还需要commons-logging相关jar. 3.打开eclise创建一个工程,并将 ...

  5. spring boot(二): spring boot+jdbctemplate+sql server

    前言 小项目或者做demo时可以使用jdbc+sql server解决即可,这篇就基于spring boot环境使用jdbc连接sql server数据库,和spring mvc系列保持一致. 在sp ...

  6. [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

    前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...

  7. Redis实战之征服 Redis + Jedis + Spring (二)

    不得不说,用哈希操作来存对象,有点自讨苦吃! 不过,既然吃了苦,也做个记录,也许以后API升级后,能好用些呢?! 或许,是我的理解不对,没有真正的理解哈希表. 相关链接: Redis实战 Redis实 ...

  8. Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控

    Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控 Spring Boot Actuator提供了对单个Spring Boot的监控,信息包含: ...

  9. spring boot(二十)使用spring-boot-admin对服务进行监控

    上一篇文章<springboot(十九):使用Spring Boot Actuator监控应用>介绍了Spring Boot Actuator的使用,Spring Boot Actuato ...

随机推荐

  1. hdu 4352 "XHXJ's LIS"(数位DP+状压DP+LIS)

    传送门 参考博文: [1]:http://www.voidcn.com/article/p-ehojgauy-ot.html 题解: 将数字num字符串化: 求[L,R]区间最长上升子序列长度为 K ...

  2. Adapter的getView

    http://blog.csdn.net/yelbosh/article/details/7831812 BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组 ...

  3. mysql 游标的使用方法

    BEGIN /*计算用户提成总金额*/ declare amountPrice,pays,rates,goodsPrice DECIMAL(10,2) DEFAULT 0; DECLARE flag ...

  4. Tomcat7 1000并发量配置以及配置优化

    首先,修改tomcat/conf/server.xml配置文件.     其次,修改tomcat/bin/catalina.bat配置文件为以下.     主要修改了maxThreads.accept ...

  5. 二维数组过滤,根据多个条件获取二维数组中指定的arr

    /** * 二维数组过滤,根据多个条件获取二维数组中指定的arr * @param $data_arr * @param $lm_number * @param $source_type * @par ...

  6. qml Loader异步导致ComBoBox数据乱序

    qml  Loader异步导致ComBoBox数据乱序 当使用Loader动态加载qml文件时, 如果将Loader设置为异步,那么动态加载的组件内的ComBoBox数据将呈现乱序状态, 代码请见下文 ...

  7. 你一直在找的 Mac 系统优化工具,可能就是这一款!

    文章来源:知乎 文章收录于:风云社区 www.scoee.com,提供上千款各类mac软件下载 尽管 Mac 上的维护工具总会被人诟病(通常是那些极客),但对于普通用户来说,像 CleanMyMac. ...

  8. python3.5和python3.6关于json模块的区别

    python3.5中 无法反序列化bytes数据必须decode成str才可以 >>> import json >>> a = b'{"username& ...

  9. mysql 遍历所有的库并根据表和sql语句备份

    建库.用户语句 create database test_hb; create user ' test_hb'@'%' identified by '123456'; grant all privil ...

  10. Netsarang

    下载 https://www.netsarang.com/zh/all-downloads/ 建议直接下载 xmanager-power-suite,里面包含了 Xmanager.Xshell.Xft ...