获取Bean的两种方式(注解、API)

方式一:注解方式

注解方式是常用的方式,使用@RestController、@Service、@Repository(Mybatis使用@Mapper)、@Conponent分别标注控制层(视图层)类、业务逻辑层类、数据访问层类和其他非三层架构的类,使其加入到IOC容器中,需要获取时,使用@AutoWirted自动装配。

另外,IOC容器中存在多个相同类型的Bean时,再使用@Primary、@Qualifier、@Resource注解指定某个Bean(参考:http://t.csdn.cn/bORn6)。

(标注类)
获取Bean的两种方式(注解、API)_第1张图片

(获取Bean)
获取Bean的两种方式(注解、API)_第2张图片

获取Bean的两种方式(注解、API)_第3张图片

方式二:API方式

API方式,可使用IOC容器对象(ApplicationContext)中的getBean()方法获取对应的Bean,该方法有以下三个重载方法:

注意导包时,导入的是org.springframework.context里面的ApplicationContext对象
获取Bean的两种方式(注解、API)_第4张图片

【方法一】根据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)_第5张图片

总结

推荐使用注解方式获取Bean,如果需要使用API获取Bean,建议使用方法二、方法三,因为方法一按照Bean名称获取,书写时没有提示,可能会写错。

方法二使用类名获取Bean,如果IOC中存在多个相同类型时,再加Bean名称,使用方法三,可以避免报错。

你可能感兴趣的:(java,mybatis,spring)