方式一:注解方式
注解方式是常用的方式,使用@RestController、@Service、@Repository(Mybatis使用@Mapper)、@Conponent分别标注控制层(视图层)类、业务逻辑层类、数据访问层类和其他非三层架构的类,使其加入到IOC容器中,需要获取时,使用@AutoWirted自动装配。
另外,IOC容器中存在多个相同类型的Bean时,再使用@Primary、@Qualifier、@Resource注解指定某个Bean(参考:http:///bORn6)。
(标注类)
(获取Bean)
方式二:API方式
API方式,可使用IOC容器对象(ApplicationContext)中的getBean()方法获取对应的Bean,该方法有以下三个重载方法:
注意导包时,导入的是org.springframework.context里面的ApplicationContext对象
【方法一】根据name获取bean:Object getBean(String name)
// 自动装配ApplicationContext
@Autowired
private ApplicationContext applicationContext;
@Test
public void printBean(){
// 根据bean名称,获取bean,默认的bean名称为首字母小写的类名
StuMapper stuMapper = (StuMapper) applicationContext.getBean("stuMapper");
// 调用Mapper对象的findAll()方法
System.out.println(stuMapper.findAll());
}
【方法二】根据类型获取bean:T getBean(Class requiredType)
// 自动装配ApplicationContext
@Autowired
private ApplicationContext applicationContext;
@Test
public void printBean(){
// 根据类型获取bean
StuMapper stuMapper = applicationContext.getBean(StuMapper.class);
// 调用Mapper对象的findAll()方法
System.out.println(stuMapper.findAll());
}
【方法三】根据name获取bean(带类型转换):T getBean(String name, Class requiredType)
// 自动装配ApplicationContext
@Autowired
private ApplicationContext applicationContext;
@Test
public void printBean(){
// 根据name获取bean(带类型转换)
StuMapper stuMapper = applicationContext.getBean("stuMapper", StuMapper.class);
// 调用Mapper对象的findAll()方法
System.out.println(stuMapper.findAll());
}
方法执行完成,说明获取Mapper成功
总结
推荐使用注解方式获取Bean,如果需要使用API获取Bean,建议使用方法二、方法三,因为方法一按照Bean名称获取,书写时没有提示,可能会写错。
方法二使用类名获取Bean,如果IOC中存在多个相同类型时,再加Bean名称,使用方法三,可以避免报错。