从Spring 3起,JavaConfig功能已经包含在Spring核心模块,它允许开发者将bean定义和在Spring配置XML文件到Java类中。

需要先加载spring-context 包

   <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>

代码:

package com.company;

/**
* Created by Administrator on 2017/2/22 0022.
*/
public interface ISay {
void say(String msg);
}
package com.company;

/**
* Created by Administrator on 2017/2/22 0022.
*/
public class SayImpl implements com.company.ISay {
public void say(String msg){
System.out.println("Person Say:"+msg);
}
}

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

package com.company;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* Created by Administrator on 2017/2/22 0022.
*/
@Configuration
public class JavaConfig {
@Bean(name="GetSay")
public com.company.ISay GetSay(){
return new com.company.SayImpl();
}
}
package com.company;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main {
public static void main(String[] args) {
ApplicationContext context =new AnnotationConfigApplicationContext(com.company.JavaConfig.class);
com.company.ISay obj=(com.company.ISay) context.getBean("GetSay");
obj.say("hongdada");
}
}
log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Person Say:hongdada

多个Bean

package com.company;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; interface ISay {
String Country="China";
void say(String msg);
} class SayImpl implements com.company.ISay {
public void say(String msg){
System.out.println("Person Say:"+msg);
}
} class SayImpl2 implements com.company.ISay {
public void say(String msg){
System.out.println(com.company.ISay.Country+" Person2 Say:"+msg);
}
} @Configuration
class JavaConfig {
@Bean(name="GetSay")
public com.company.ISay GetSay(){
return new com.company.SayImpl();
} @Bean(name="GetSay2")
public com.company.ISay GetSayTwo(){
return new com.company.SayImpl2();
}
} public class Main {
public static void main(String[] args) {
ApplicationContext context =new AnnotationConfigApplicationContext(com.company.JavaConfig.class);
com.company.ISay obj=(com.company.ISay) context.getBean("GetSay");
obj.say("hongdada"); com.company.ISay obj2=(com.company.ISay) context.getBean("GetSay2");
obj2.say("hongdada");
}
}
Person Say:hongdada
China Person2 Say:hongdada

另外一种获取Bean的方式:

package com.company;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; interface ISay {
String Country="China";
void say(String msg);
} class SayImpl implements com.company.ISay {
public void say(String msg){
System.out.println("Person Say:"+msg);
}
} class SayImpl2 implements com.company.ISay {
public void say(String msg){
System.out.println(com.company.ISay.Country+" Person2 Say:"+msg);
}
} @Configuration
class JavaConfig {
@Bean(name="GetSay")
public com.company.ISay GetSay(){
return new com.company.SayImpl();
} // @Bean(name="GetSay2")
// public com.company.ISay GetSayTwo(){
// return new com.company.SayImpl2();
// }
} public class Main {
public static void main(String[] args) {
// ApplicationContext context =new AnnotationConfigApplicationContext(com.company.JavaConfig.class);
// com.company.ISay obj=(com.company.ISay) context.getBean("GetSay");
// obj.say("hongdada");
//
// com.company.ISay obj2=(com.company.ISay) context.getBean("GetSay2");
// obj2.say("hongdada");
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(JavaConfig.class);
ctx.refresh();
ISay obj=ctx.getBean(ISay.class);
obj.say("hongdada");
}
}
Person Say:hongdada

可以发现,这里面直接根据ISay.class来获取对应的Bean,那么JavaConfig里面必须只有一个返回值是ISay的Bean,不然就会报错。

Exception in thread "main" org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.company.ISay' available: expected single matching bean but found 2: GetSay,GetSay2
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1041)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:345)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
at com.company.Main.main(Main.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

========================

@ImportClass

http://www.manongjc.com/article/1603.html

http://www.cnblogs.com/strivelearn/p/6096128.html

http://www.kancloud.cn/evankaka/springlearning/119666

JavaConfig 使用Java代码进行显示配置的更多相关文章

  1. 用JAVA代码获取Weblogic配置的JNDI 数据源连接

    第一步:生成与JDK版本对应的weblogicjar,利用cmd 进入到weblogic_home 路径下进入到server/lib目录,然后运行  JDK  1.6 命令 "java -j ...

  2. 使用Java代码自定义Ribbon配置

    很多场景下,需要实现不同的微服务采用不同的策略,例如修改Ribbon的负载均衡规则等.Spring Cloud允许使用Java代码自定义Ribbon的配置. 在Spring Cloud中,Ribbon ...

  3. 基于java代码的springmvc配置

    在我的印象中,开发一个web项目首选当然是springmvc,而配置springmvc无非就是web.xml里配置其核心控制器DispatcherServlet.然后把所有的请求都交给它处理,再配个视 ...

  4. 在java代码中显示json字符串(怎么避免json字符串中双引号在java代码中显示)

    String log = "eyJvcmRlckluZm8iOnsiaWQiOjEwNzQwNCwib3JkZXJJZCI6MjczNjQyMSwicHJvZHVjdENvZGUiOjQ1N ...

  5. mybatis逆向工程生成java代码和xml配置

    mybatis官方提供了一个逆向工程包,可以针对数据库表自动生成mybatis执行所需要的Pojo.Mapper xml文件.Mapper 接口文件. mybatis-generator有很多种用法: ...

  6. 使用yaml+groovy实现Java代码可配置化

    背景与目标 在使用函数接口和枚举实现配置式编程(Java与Scala实现),使用了函数接口和枚举实现了配置式编程.读者可先阅读此文,再来阅读本文. 有时,需要将一些业务逻辑,使用配置化的方式抽离出来, ...

  7. 使用Java代码配置MyBatis Generator

    使用MyBatis Generator生成器时,有时候没办法使用xml型的配置文件,比如将Maven项目设置成pom打包方式(<packaging>pom</packaging> ...

  8. 转!!Java代码规范、格式化和checkstyle检查配置文档

    为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...

  9. Java代码规范、格式化和checkstyle检查配置文档

    http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...

随机推荐

  1. FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format)

    w SELECT ro.*, FROM_UNIXTIME(ro.wstart,'%Y%m%d') FROM room_order ro

  2. Python的一些教程(转)

    原文:http://blog.chinaunix.net/uid-26200547-id-3418038.html Python 安装配置及基本语法篇 Python 语言速成 Python 基本知识  ...

  3. &lt;Android 开源库&gt; GreenDAO 使用方法具体解释&lt;译文&gt;

    简单介绍 greenDAO是一个开源的Android ORM,使SQLite数据库的开发再次变得有趣. 它减轻了开发者处理底层的数据库需求,同一时候节省开发时间. SQLite是一个非常不错的关系型数 ...

  4. MySQL中的表级锁

    数据的锁主要用来保证数据的一致性,数据库的锁从锁定的粒度上可以分为表级锁,行级锁和页级锁. MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制,比如MyISAM和MEMORY存 ...

  5. (3.10)常用知识-T-SQL优化

    关键字:SQL优化 总结: 1.书写问题 2.表连接方式 3.索引的抉择 4.执行计划之参数嗅探,使用提示强制执行计划 5.子查询与表连接的效率 6.临时表.CTE.表变量的选择 7.常用sp与sel ...

  6. linux 系统性能指标

    一.查看CPU使用情况 cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进入wait. 平均负载(loadaverage)是指某段时 ...

  7. Java集合—Set(转载)

    Set集合中包含了三个比较重要的实现类:HashSet.TreeSet和EnumSet.本篇文章将重点介绍这三个类. 一.HashSet类 HashSet简介 HashSet是Set接口的典型实现,实 ...

  8. Spring第三弹—–编码剖析Spring管理Bean的原理

    先附一下编写的Spring容器的执行结果: 代码如下: 模拟的Spring容器类:   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  9. SDUT3145:Integer division 1(换零钱背包)

    题目:传送门 题目描述 整数划分是一个非常经典的数学问题. 所谓整数划分,是指把一个正整数n写成为n=m1+m2+...+mi的形式,其中mi为正整数,并且1<=mi<=n,此时,{m1, ...

  10. Java中的并发编程集合使用

    一.熟悉Java自带的并发编程集合 在java.util.concurrent包里有很多并发编程的常用工具类. package com.ietree.basicskill.mutilthread.co ...