JavaConfig 使用Java代码进行显示配置
2017-02-22 16:48
381 查看
从Spring 3起,JavaConfig功能已经包含在Spring核心模块,它允许开发者将bean定义和在Spring配置XML文件到Java类中。
需要先加载spring-context 包
代码:
使用 @Configuration 注释告诉 Spring,这是核心的 Spring 配置文件,并通过 @Bean 定义 bean。
多个Bean
View Code
另外一种获取Bean的方式:
可以发现,这里面直接根据ISay.class来获取对应的Bean,那么JavaConfig里面必须只有一个返回值是ISay的Bean,不然就会报错。
========================
@ImportClass
http://www.manongjc.com/article/1603.html
http://www.cnblogs.com/strivelearn/p/6096128.html
http://www.kancloud.cn/evankaka/springlearning/119666
需要先加载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
Person Say:hongdada China Person2 Say:hongdada
View Code
另外一种获取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
相关文章推荐
- 使用 IntelliJ IDEA 开发一般 Java 应用程序时配置 Allatori 进行代码混淆
- 在Ubuntu Linux下面使用Eclipse进行Java编程的安装配置
- 使用外联文件对Web.config的appSettings进行配置
- windows下使用ffmpeg进行视频转码,图片拉取的Java测试代码
- 如何使用Eclipse和GDB对JNI代码进行调试(JAVA和C)
- 使用JNI进行Java与C/C++语言混合编程(2)--在C/C++中调用Java代码
- Control Study->AdRotator广告控件显示自定义配置文件中广告以及与DataGrid控件结合使用显示图片(示例代码下载)
- 使用JNI进行Java与C/C++语言混合编程(2)--在C/C++中调用Java代码
- 使用JNI进行混合编程:在C/C++中调用Java代码
- 使用JNI进行混合编程:在C/C++中调用Java代码
- 使用 Java 配置进行 Spring bean 管理
- 使用Java程序控制Barone(Zebra)进行打印的代码
- 如何使用svconfigeditor.exe编辑WCF Service配置文件--配置Diagnostics进行WCF Service的log和Trace(三)
- 使用Purify进行java代码内存泄漏检测与诊断
- Control Study->AdRotator广告控件显示自定义配置文件中广告以及与DataGrid控件结合使用显示图片(示例代码下载)
- 大型Java项目中使用maven进行管理,pom.xml文件中build的配置
- asp.net连接sql2005,cs文件里直接书写的代码,纯手工操作,不在web.config里面进行配置。
- 配置----Hibernate可配置的编程方式,驱动、URL、数据库访问岁用户名、密码等用使用Java代码手动加载!
- 使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试
- 使用Java进行SNMP编程-SNMP4J-SNMPv3-代码实例