Spring注入失败

尽管书看了厚厚一本,但实际用起来,还是经常会碰到一些问题。
再次一一进行记录。


Spring本质是一个容器的管理工具,所以你如果将要依赖它的注入功能。你就不能去手动new一个对象。

例子:

B是一个bean
class A{
@Autowired
B b;
}
这时,c想用注入了B的A,则A也要在C中依靠Spring进行注入
把A也设置成一个bean
class C{
@Autowired
A a;
}
而不能去new一个A,如果是自己new的,Spring无法将B注入到A中

很多时候,我们的job都会通过new job的方式进行使用,但如果job中有依赖自动注入,如何解决呢?
参考文档:
单例注入到多例是一个自然的方式,但多例如何注册到单例呢?注入的过程是在单例的实例化过程中的, 且只有一次
Spring官方文档给出的是 Method Injection的方式,例子中的commod,你可以根据个人需求,设置为prototype形式

public class CommandManager implements ApplicationContextAware {

    private ApplicationContext applicationContext;

    public Object process(Map commandState) {
        // grab a new instance of the appropriate Command
        Command command = createCommand();
        // set the state on the (hopefully brand new) Command instance
        command.setState(commandState);
        return command.execute();
    }

    protected Command createCommand() {
        // notice the Spring API dependency!
        return this.applicationContext.getBean("command", Command.class);
    }

    public void setApplicationContext(
            ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}

自动注入时的父类和子类

实际碰到的问题,代码需要用到spring-data 里的RedisTemplate和StringRedisTemplate,使用@autowired,发现注入的无法实现。
1.@autowired 默认注入是 通过类型注入的,如果要通过beanID注入,则需要结合@Qualifier一起使用。
2.stringRedisTemplate是redisTemplate的子类,所以注入会发生问题,通过@Qualifier使用Id注入可解决问题


用spring管理的实例对象必须包含一个无参的构造参数

这个是改造一些他人不用Spring管理的框架中遇到的,用spring管理的实例对象必须包含一个无参的构造参数,否则会报错


推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 128,990评论 18 137
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 43,144评论 6 343
  • 文章作者:Tyan博客:noahsnail.com | CSDN | 简书 3.9 Annotation-base...
    SnailTyan阅读 918评论 0 3
  • 转载链接 使用Spring2.5的新特性--Autowired可以实现快速的自动注入,而无需在xml文档里面添加b...
    于谦大爷阅读 509评论 0 4
  • 这个图,就是我的人生,当然,图比较草率,我们先不说这,这个草图就是我的人生900个月。 我剩下的就是我中间白色的部...
    Python面面观阅读 339评论 0 2
  • 常言道,把酒待客,以茶会友。 那客一般都慌张而来,赶忙而去,目的明确。这友大多盘桓多时,如羚羊挂角,随遇而安。 茶...
    烟花英雄阅读 195评论 24 6
  • 一、问题描述 程序启动的时候会请求用户是否打开推送,如果打开则能收到推送的新闻内容,相应的功能按钮也将打开,如果没...
    SanW阅读 299评论 0 0
  • 用我的一生写封信给你啊 本文参加#未完待续,就要表白#活动,本人承诺,文章内容为原创,且未在其他平台发表过。 有年...
    三五七言c阅读 107评论 0 0