java config配置_JavaConfig 使用Java代码进行显示配置

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

需要先加载spring-context 包

org.springframework

spring-context

4.3.6.RELEASE

代码:

packagecom.company;/*** Created by Administrator on 2017/2/22 0022.*/

public interfaceISay {voidsay(String msg);

}

packagecom.company;/*** Created by Administrator on 2017/2/22 0022.*/

public class SayImpl implementscom.company.ISay {public voidsay(String msg){

System.out.println("Person Say:"+msg);

}

}

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

packagecom.company;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;/*** Created by Administrator on 2017/2/22 0022.*/@Configurationpublic classJavaConfig {

@Bean(name="GetSay")publiccom.company.ISay GetSay(){return newcom.company.SayImpl();

}

}

packagecom.company;importorg.springframework.context.ApplicationContext;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;public classMain {public static voidmain(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 forlogger (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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.company;importorg.springframework.context.ApplicationContext;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;interfaceISay {

String Country="China";voidsay(String msg);

}class SayImpl implementscom.company.ISay {public voidsay(String msg){

System.out.println("Person Say:"+msg);

}

}class SayImpl2 implementscom.company.ISay {public voidsay(String msg){

System.out.println(com.company.ISay.Country+" Person2 Say:"+msg);

}

}

@ConfigurationclassJavaConfig {

@Bean(name="GetSay")publiccom.company.ISay GetSay(){return newcom.company.SayImpl();

}

@Bean(name="GetSay2")publiccom.company.ISay GetSayTwo(){return newcom.company.SayImpl2();

}

}public classMain {public static voidmain(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");

}

}

View Code

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

Person Say:hongdada

China Person2 Say:hongdada

View Code

另外一种获取Bean的方式:

packagecom.company;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;interfaceISay {

String Country="China";voidsay(String msg);

}class SayImpl implementscom.company.ISay {public voidsay(String msg){

System.out.println("Person Say:"+msg);

}

}class SayImpl2 implementscom.company.ISay {public voidsay(String msg){

System.out.println(com.company.ISay.Country+" Person2 Say:"+msg);

}

}

@ConfigurationclassJavaConfig {

@Bean(name="GetSay")publiccom.company.ISay GetSay(){return newcom.company.SayImpl();

}//@Bean(name="GetSay2")//public com.company.ISay GetSayTwo(){//return new com.company.SayImpl2();//}

}public classMain {public static voidmain(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 = newAnnotationConfigApplicationContext();

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值