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 ...
随机推荐
- echart绑定点击事件
实例页面:http://echarts.baidu.com/echarts2/doc/example/event.html option = { tooltip : { trigger: 'axis' ...
- Net 常用资源
opensource: http://www.dotnetfoundation.org/projects https://github.com/dotnet/corefx Enterprise Lib ...
- FormsAuthentication 使用指南
配置安全鉴别 鉴别是指鉴定来访用户是否合法的过程.ASP.NET Framework支持三种鉴别类型: Windows鉴别: NET Passport鉴别: Forms鉴别. 对于某一特定的应用程序, ...
- Mustache 中的html转义问题处理
避免在使用Mustache引擎是发生html字符转义 1,模板代码示例: var xml= " <?xml version="1.0" encoding=&q ...
- 转!!Linux 里的 2>&1 究竟是什么
原博文地址:https://blog.csdn.net/shunzi1046/article/details/76110963 我们在Linux下经常会碰到nohup command>/dev/ ...
- Error-the resource is not on the build path of a java project
错误描述 eclipse中的the resource is not on the build path of a java project,在Eclipse中点击生成源码时,弹窗提示该错误 解决办法 ...
- 微信对接HIS——微信可查检验结果
患者仅仅要关注医院官方微信,不管身处何地,输入自己预留在医院的电话号码.检验单的条码号,就能够了解检验结果. 医院信息系统在提供病人数据信息前,会对查询方做身份认证和安全防护检測,录入患者挂号时预留的 ...
- 用Html5制作的一款数学教学程序Function Graphics(绘制函数图的程序)
最近我不仅对游戏开发感兴趣,还对函数图感兴趣,特此我开发了这个程序.以下是一些介绍和下载演示地址,喜欢的朋友可以看看: 一,产品名片 产品名:Function Graphics 版本: 0.1 开发者 ...
- 理解tomcat之搭建简易http服务器
做过java web的同学都对tomcat非常熟悉.我们在使用tomcat带来的便利的同时,是否想过tomcat是如何工作的呢?tomcat本质是一个http服务器,本篇文章将搭建一个简单的http服 ...
- 学习完成CSS布局(左右浮动)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...