--IOC(控制反转)
是一种概念,一种思想
解耦合
通过spring容器管理和装配对象,不用自己手动创建对象
1.依赖注入(DI)
(1)基于XML的DI
<bean id="" class=""></bean>
注意:id是唯一的,class是类的全限定类名,不能是接口
必须提供对应的setter方法
初始化方法 init-method
销毁时方法 destory-method
a.设值注入(无参构造方法)
i.简单类型数据
<property name="属性名" value="普通值"/>
ii.引用类型数据
<property name="属性名" ref="引用bean的id"/>
b.构造注入(有参构造方法)
i.简单类型数据
<constructor-arg name="形参名" value="普通值"/>
ii.引用类型数据
<constructor-arg name="形参名" ref="引用bean的id"/>
<constructor-arg index="形参名的位置,从0开始" ref="引用bean的id"/>
c.对于引用类型属性的自动注入
i.byName 根据名称自动注入
<bean autowire="byName"/>
ii.byType 根据类型自动注入(同类型只能有一个,多了spring就不知道该注入谁)
<bean autowire="byType"/>
(2)基于Annotation的DI
xml中配置组件扫描器<context:component-scan base-package="com.summary.annotation"/>
a.相当于bean的id,用来创建对象.只能在类上使用,不指定value属性,bean的id是类名首字母小写
@Component("student") --普通Bean
@Service --service层
@Respository --dao层
@Controller
b.给简单类型数据赋值,既可以加到属性上,也可以加到setter方法上
@Value("张三")
c.给引用类型赋值,通过类型byType,既可以加到属性上,也可以加到setter方法上
@Autowired
d.给引用类型赋值,通过名字byName,既可以加到属性上,也可以加到setter方法上
@Autowired
@Qualifier("classRoom") --别的bean的id
e.指定bean对象的作用域
@Scope("singleton")-- 默认是单例,只创建一个对象
@Scope("prototype")-- 每次getBean()都创建一个新的对象
f.Jdk自带的@Resource
@Resource --不带参数,默认先byName再byType
@Resource(name="") -- byName注入
g.bean的生命始末
@PostConstruct --在创建对象之后(xml中init-method)
@PreDestory --在对象销毁之前(xml中destory-method)
2.依赖查找(DL)
比较典型的是依赖于JNDI服务接口(Java Naming andDirectory Interface)的查找