JavaConfig 使用Java代码进行显示配置
从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代码进行显示配置的更多相关文章
- 用JAVA代码获取Weblogic配置的JNDI 数据源连接
第一步:生成与JDK版本对应的weblogicjar,利用cmd 进入到weblogic_home 路径下进入到server/lib目录,然后运行 JDK 1.6 命令 "java -j ...
- 使用Java代码自定义Ribbon配置
很多场景下,需要实现不同的微服务采用不同的策略,例如修改Ribbon的负载均衡规则等.Spring Cloud允许使用Java代码自定义Ribbon的配置. 在Spring Cloud中,Ribbon ...
- 基于java代码的springmvc配置
在我的印象中,开发一个web项目首选当然是springmvc,而配置springmvc无非就是web.xml里配置其核心控制器DispatcherServlet.然后把所有的请求都交给它处理,再配个视 ...
- 在java代码中显示json字符串(怎么避免json字符串中双引号在java代码中显示)
String log = "eyJvcmRlckluZm8iOnsiaWQiOjEwNzQwNCwib3JkZXJJZCI6MjczNjQyMSwicHJvZHVjdENvZGUiOjQ1N ...
- mybatis逆向工程生成java代码和xml配置
mybatis官方提供了一个逆向工程包,可以针对数据库表自动生成mybatis执行所需要的Pojo.Mapper xml文件.Mapper 接口文件. mybatis-generator有很多种用法: ...
- 使用yaml+groovy实现Java代码可配置化
背景与目标 在使用函数接口和枚举实现配置式编程(Java与Scala实现),使用了函数接口和枚举实现了配置式编程.读者可先阅读此文,再来阅读本文. 有时,需要将一些业务逻辑,使用配置化的方式抽离出来, ...
- 使用Java代码配置MyBatis Generator
使用MyBatis Generator生成器时,有时候没办法使用xml型的配置文件,比如将Maven项目设置成pom打包方式(<packaging>pom</packaging> ...
- 转!!Java代码规范、格式化和checkstyle检查配置文档
为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...
- Java代码规范、格式化和checkstyle检查配置文档
http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...
随机推荐
- java常用队列分析
一.ArrayBlockingQueue 首先看一段源码: public class ArrayBlockingQueue<E> extends AbstractQueue<E> ...
- java面试基础题------》Java 中的final关键字有哪些用法
(1)修饰类:表示该类不能被继承: (2)修饰方法:表示方法不能被重写: (3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量).
- zipline风险指标计算 (empyrical模块)
概述 量化中,我们经常会遇到各种量化指标的计算,对于zipline来说,也会对这部分计算进行处理,由于指标计算的通用性比较强,所以,zipline单独封装了 empyrical 这个模块,可以处理类似 ...
- Web爬虫的C#请求发送
public class HttpControler { //post请求发送 private Encoding m_Encoding = Encoding.GetEncoding("gb2 ...
- 关于android:windowNoTitle不起作用的解决办法
今天测试一个新功能的时候,在styles.xml设置<item name="android:windowNoTitle">true</item>并没有生效, ...
- HDU中大数实现的题目,持续更新(JAVA实现)
HDU1002:大数加法,PE了N次 import java.util.Scanner; import java.math.*; public class Main { public static v ...
- HDU2425:Hiking Trip(简单bfs,优先队列实现)
题目: 传送门 题意很简单就不解释了,水题一道. #include <iostream> #include <string.h> #include <stdio.h> ...
- MySQL学习之——锁(转)
锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是协调多个进程或县城并发访问某一资源的一种机制.在数据库当中,除了传统的计算资源(CPU.RAM.I/O等等)的争用之外,数据也是一 ...
- (转)VC串口小程序(用SerialPort类)
××××××××××××××××××××××××××××××××××××××××××××××××××××× 在MFC里面实现串口通讯有很多方式: 方案一:使用微软公司提供的 串口类,SerialPor ...
- PHP连接MYSQL操作数据库
PHP连接MYSQL操作数据库 <?php $con = mysql_connect("localhost","root",""); ...