Ioc指控制反转,将对象的创建权有开发者转到Ioc容器,当要使用对象时,使用DI即依赖注入的方式注入获取,容器负责创建和管理对象。这样可以降低代码之间的耦合性,提高代码的可维护性和可测试性。
其实现机制是反射+工厂模式,Ioc容器可理解为一个对象工厂,需要定义对象时,通过对工厂类传入标识(如全类名、id),通过反射的方式返回并强制转换,即得到了所需的类。
//创建spring IOC容器对象。ClassPathXmlApplicationContext表示配置文件在类路径下,它是接口ApplicationContext的一个实现类。
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
//从IOC容器中获取Bean实例,其中applicationContext.xml有id为car的标签
Car c2Bean=(Car)ctx.getBean("car");
在Spring框架中,可以使用XML配置文件或注解来配置和使用IoC容器。XML配置文件可以定义对象的创建和依赖关系,注解可以在类或方法级别指示对象之间的依赖关系,通过使用ApplicationContext或BeanFactory接口,可以获取IoC容器的实例,并使用它来管理对象的生命周期和依赖关系。对于使用注解的方式,通过@Autowired实现,例如service服务层的实现接口的方法,加入了@Service注解,Spring容器会自动扫描标有@Service注解的类,并将其实例化为Spring Bean,然后纳入Spring容器的管理,这样,开发者就可以在其他组件中通过@Autowired引用这些服务。
Ioc注入的三种方式:构造器注入、setter方法注入、根据注解注入。
Ioc实现组件之间的解耦,提高程序的灵活性和可维护性,但仍存在一些缺点,主要有:
1、使用反射来创建对象,所以在效率上会有些损耗。
2、对于XML方式,如果修改了类名,还需到XML文件中手动修改。