刚刚看完尚学堂的spirng动态代理视频,有一个问题求教一下:
public class Client { public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");

UserManager userManager = (UserManager)factory.getBean("userManager");

userManager.addUser("张三", "123");
userManager.deleteUser(1);
}
}
以上代码中UserManager userManager = (UserManager)factory.getBean("userManager");
为什么要强转为接口UserManager呢,转为UserManagerimpl行吗??

解决方案 »

  1.   

    如果userManager被JDK动态代理了就不行,没被代理过那是可以的,被CGLIB代理也应该可以的
      

  2.   

     实际上,IOC容器就是一个大抽象的工厂,但是它的实现比工厂要复杂,因为很多对象的依赖关系它也进行管理了,并不管理的创建对象。当执行factory.getBean("userManager")时,就会从容器中取出来,当取出来时,就会new一个UserManagerImpl(实现),因为这个类有一个接口,所以直接转换成接口就可以了。这样就从IOC容器中拿到UserManager了