本文共 1229 字,大约阅读时间需要 4 分钟。
Spring支持3中依赖注入的方式
属性注入即通过setter方法注入Bean的属性值或依赖的对象 属性注入使用<property>元素,使用name属性指定Bean的属性名称,value属性或<value>子节点指定属性值 public static void main(String[] args) { //创建spring的IOC容器 FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("classpath:spring.xml"); //从IOC容器中获取bean的实例 通过bean的名称获取bean的实例 A a = (A)context.getBean("a"); System.out.println(a.getName()+" "+a.getAge()); B b = (B)context.getBean("b"); System.out.println(b.getA().getName()+" "+b.getA().getAge());}
结果
通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例在实例化就可以使用。 构造器注入在<constructor-arg>元素里声明属性, <constructor-arg>中没有name属性
根据名字入参
还可根据类型入参,不推荐使用,建议用名字入参
Spring IOC 容器可以自动装配Bean。需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式 byType(根据类型自动装配):对象属性所在的类 在容器中 只能拥有一个实例(多个实例是相对的,如果对象中的属性是集合,可以装配多个List里的对象) byName(根据名称自动装配):根据当前对象属性的名称来查找对应的实例 constructor(通过构造器自动装配):当Bean中存在多个构造器时,此种自动装配方式将会很复杂。不推荐使用 在Bean配置文件里设置autowire属性进行自动装配将会装配Bean的所有属性,然而,若只希望装配个别属性时,autowire属性就不够灵活了。 autowire属性要么根据类型自动装配,要么根据名称自动装配,不能两者兼而有之。 一般情况下,在实际的项目中很少使用自动装配功能,因为和自动装配功能所带来的好处比起来,明确清晰的配置文档更有说服力一些。