从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. Centos7.2yum安装时候出现db5错误的解决办法

    Centos7.2使用yum安装软件是出现如此错误提示 解决办法 删除 /var/lib/rpm文件夹下面所有以__db开头的文件

  2. ZOJ 3932 Handshakes

    Last week, n students participated in the annual programming contest of Marjar University. Students ...

  3. poj1742 Coins【多重背包】【贪心】

    Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions:43969   Accepted: 14873 Descriptio ...

  4. R语言中将数据框(data.frame)中字符型数据转化为数值型

    as.data.frame(lapply(data,as.numeric))

  5. java面试基础题------》抽象类和接口有什么异同

    划重点!!!! 1.抽象类(abstract class)和接口(interface)有什么异同? 相同点 * 都不能被直接实例化,都可以通过继承实现其抽象方法. * 都是面向抽象编程的技术基础,实现 ...

  6. Graphite grafana

    Graphite http://graphiteapp.org/ Graphite is an enterprise-ready monitoring tool that runs equally w ...

  7. Yii2的主从数据库设置

    项目做大了,数据库主从还是不可少的.使用Yii框架开发,如何设置数据库的主从呢?其实很简单. 先说一个主数据库服务器和多个从数据库服务器的情况,修改配置文件 config/db.php ,其中 sla ...

  8. VC2005 warning C4819 消除方法

    一. Warning C4819:The file contains a character that can ot be represented in the current code page(9 ...

  9. Python3.6编译安装以及python开发之virtualenv与virtualenvwrapper

    Python3.6编译安装 下载python源码包 先到安装目录 cd /opt 下载源码包 wget https://www.python.org/ftp/python/3.6.2/Python-3 ...

  10. 0606-Zuul构建API Gateway-Zuul过滤器以及禁用Zuul过滤器

    一.概述 针对Spring Cloud的Zuul配备了许多在代理和服务器模式下默认启用的ZuulFilter bean. 有关启用的可能过滤器,请参阅zuul过滤器包. 二.Zuul过滤器使用 2.1 ...