装配方式
1.XML方式的自动装配
设置:<bean />元素的:autowire属性
<bean id="somebean" class="SomeBean全限定名" autowire="byType"/>
autowire属性:让spring按照一定的方式自己去找合适的对象,并完成DI
- default:不要自动注入
- no:不要自动注入
- byName:按照名字注入(按照属性的名字在spring中找bean) factory.getBean("属性的名字")
- byType:按照依赖对象的类型注入(factory.getBean(属性的类型))
- constructor:按照对象的构造器上面的参数类型注入
注意:
1,如果按照byName自动注入,要求所有的属性名字和id的名字必须保证一种规范的命名方式;
2,如果按照byType注入,如果spring中同一个类型有多个实例-->报bean不是唯一类型错误;
2.注解方式的自动装配
在Spring中使用注解来完成DI操作,我们称之为注解自动装配,存在两种用法.
一:使用Spring框架自身提供的标签:Autowired
二:使用JavaEE规范提供的标签:Resource
3.XML方式的手动装配
通过什么方式来给bean注入:
1):通过bean对象的setter方法,属性注入. 使用<property name=”属性名称” > 推荐.
2):通过Bean类的构造器来设置,构造注入. 使用<constructor-arg.../>
注入的类型有哪些:
1):简单数据类型. 使用value.
2):复合数据类型. 使用ref.
3):集合数据类型. 使用集合的元素.
bean 实例化的三种方式实现
第一种:使用类的无参数构造创建
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 关键部分 --> <bean id="bean1" class="com.spring.demo.Bean1"></bean> </beans>
第二种:使用静态工厂创建
package com.spring.demo; public class Bean2Factory { public static Bean2 getBean2(){ return new Bean2(); } }
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 关键部分 --> <bean id="bean2" class="com.spring.demo.Bean2Factory" factory-method="getBean2"></bean> </beans>
第三种:使用实例工厂创建
package com.spring.demo; public class Bean3Factory { public Bean3 getBean3(){ return new Bean3(); } }
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 关键部分 --> <bean id="bean3factory" class="com.spring.demo.Bean3Factory"></bean> <bean id="bean3" factory-bean="bean3factory" factory-method="getBean3"></bean> </beans>
IOC的三种实现方式
1.接口注入
public class ClassA { private InterfaceB clzB; public void doSomething() { Ojbect obj = Class.forName(Config.BImplementation).newInstance(); clzB = (InterfaceB)obj; clzB.doIt(); } …… }
2.setter方法注入
3.构造器注入
bean的作用域
bean的作用域:指的是一个bean对象可以存活多久,通过bean元素的scope属性来指定.