1. 概述
与注解配置类似,JavaConfig中也是自动装配Bean,同样可以按类型或者按名称自动装配,相信如果您对前面xml和注解方式已经比较了解的话,本篇就不用赘述太多了,此处直接上代码,需要讲解的会在注释中给出。
2. 按类型自动装配实例
2.1 干干净净的歌手类、舞者类、舞台类
由于注入工作是在javaconfig中完成,所以类上无须添加特殊信息。
package org.maoge.javaconfigssemble;
//普通歌手类
public class Singer {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package org.maoge.javaconfigssemble;
//普通舞者类
public class Dancer {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package org.maoge.javaconfigssemble;
//普通舞台类
public class Stage {
private Singer singer;
private Dancer dancer;
public Singer getSinger() {
return singer;
}
public void setSinger(Singer singer) {
this.singer = singer;
}
public Dancer getDancer() {
return dancer;
}
public void setDancer(Dancer dancer) {
this.dancer = dancer;
}
}
2.2 配置bean并自动装配
package org.maoge.javaconfigssemble;
import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration // 该类是一个配置类,Spring需要扫描该类中bean
public class BeanConfiguration {
@Bean // 生成一个命名为daolang的bean
public Singer daolang() {
Singer singer = new Singer();
singer.setName("刀郎");
return singer;
}
@Bean // 生成一个命名为liujia的bean
public Dancer liujia() {
Dancer dancer = new Dancer();
dancer.setName("刘迦");
return dancer;
}
@Bean(autowire = Autowire.BY_TYPE) // 指定按类型自动装配该bean
public Stage stage() {
Stage stage = new Stage();
return stage;
}
}
2.3 测试
package org.maoge.javaconfigssemble;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanConfiguration.class);
Stage stage = (Stage) context.getBean("stage");
System.out.println(stage.getSinger().getName());
System.out.println(stage.getDancer().getName());
}
}
上面代码成功输入如下,证明按类型自动装配成功。
刀郎
刘迦
3. 按名称自动装配
我们将装配方式改为:@Bean(autowire = Autowire.BY_NAME)按名称,运行主类提示空指针,那是因为我们生成的bean命名分别为daolang、liujia,但是我们Stage类中的属性名称为singer、dancer,所以无法按名称自动装配。
我们可以将bean的id改为singer、dancer,或者将State类的属性改为daolang、liujia,这样名字匹配后,就可以自动装配了。
此处过于简单,不在具体出示代码。
4. 总结
装配确实比较繁琐,所以这三个章节我写起来也比较烦啊,但是这是Spring的基础,还是要在理解的基础上掌握吧。
为了让大家对Spring有一个全面的了解,我一直是同时介绍xml、注解、JavaConfig三种方式,因为我自己在学习的过程中发现,如果不对三种方式有一个全面的了解,经常会读不懂别人的代码,也读不懂自己公司的项目。
哈哈,其实就是三种具体实现方式,多写写就适应了。