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;
}
}