spring使用问题

1.对于实现了接口的类,用的jdk动态代理,此时如果用AutoWired是按照class的全路径匹配的,而动态代理返回的代理类是接口的子类,此时会有类型转换错误,可以改为 @Qualifier或者用set注入

public class UserServiceImpl implements UserService {}
public class UserServiceImpl2  {
private JdbcTemplate jdbcTemplate;
    @Autowired //这种的报错
    private UserServiceImpl userServiceImpl1;
}

2.spring中获取单例bean的方式,使用于一些非依赖注入的场景,不过还是最好以依赖注入的方式获取bean
参考:iteye.com/blog/ydlmlh-1128687
通用的情况:
(1)继承自抽象类ApplicationObjectSupport
说明:
抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContextcontext)方法将ApplicationContext 对象注入。

public class FlowUtils extends ApplicationObjectSupport{
  private  ApplicationContext context;
    context = this.getApplicationContext();  
}

(2)实现接口ApplicationContextAware
实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。Spring初始化时,会通过该方法将ApplicationContext 对象注入,这个方法可以用在静态方法中,即可以单独做一个工具类,来获取spring的bean

public class TestController  implements ApplicationContextAware {
    private Jedis jedis = null;
    private static ApplicationContext context;
@Override
    public  void setApplicationContext(ApplicationContext context){
        this.context = context;
}
}
发布了88 篇原创文章 · 获赞 5 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42410730/article/details/103194707