6、使用javaConfig代替xml文件来声明和导入bean
在这之前的教程中,都是使用xml文件(即bean配置文件)来对bean进行声明的,但是在spring 3.0版本以及后续更新的版本中,提供了javaConfig的方式(即注解)来声明bean。
例如:
@Configuration
public class AppConfig {
@Bean(name="helloBean")
public HelloWorld helloWorld() {
return new HelloWorldImpl();
}
}
等效于下面的xml方式:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="helloBean" class="com.yiibai.hello.impl.HelloWorldImpl">
</beans>
例子1:使用@Configuration 和 @Bean(name=”name”)来声明bean
第一步:创建bean
HelloWorld.java
package com.main.autowrite.javaconfig;
public class HelloWorld {
public void sayHello(){
System.out.println("hello spring");
}
}
HelloWorldConfig.java
package com.main.autowrite.javaconfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HelloWorldConfig {
@Bean(name="hello")
public HelloWorld getHelloWorld(){
return new HelloWorld();
}
}
运行代码以及结果
注意:这次是使用AnnotationConfigApplicationContext 类获取spring容器
@Test
public void test(){
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(HelloWorldConfig.class);
HelloWorld helloWorld = (HelloWorld)context.getBean("hello");
helloWorld.sayHello();
}
结果如下:
例子2:使用@import导入多个bean
目录结构如下:
在例子1的基础上,增加以下三个类
Output.java
package com.main.autowrite.javaconfig;
public class Output {
public void outPut(){
System.out.println("This is a out put demo");
}
}
OutputConfig.java
package com.main.autowrite.javaconfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OutputConfig {
@Bean(name="output")
public Output getOutput(){
return new Output();
}
}
AppConfig .java
package com.main.autowrite.javaconfig;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import({ HelloWorldConfig.class, OutputConfig.class })
public class AppConfig {
}
测试方法和结果:
@Test
public void test(){
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(AppConfig.class);
HelloWorld helloWorld = (HelloWorld)context.getBean("hello");
helloWorld.sayHello();
Output output = (Output)context.getBean("output");
output.outPut();
}
结果: