1 控制反转概念
- 以前需要对象a需要对象b,a就要自己去new b(),并且使用完后a要对b进行销毁;
- 现在所有的类先在spring容器中登记,告诉spring你是个什么东西,你需要什么东西;
- 然后spring在程序运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的对象:
@Bean("initExecutor")
public Executor initExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); //设置核心线程数
return executor;
}
@Async("initExecutor")
public void clearMapOfMemory(Class clazz, String className, long delayTime){}
- 所有类的创建、销毁都由spring来控制。spring控制对象的生命周期,而不是a来控制,控制权发生了反转。
2 能注入的数据
- 基本类型和String;
- 其他bean类型;
- 复杂类型/集合类型。
3 依赖注入的方式
3.1 构造函数注入
<!-- 配置一个日期对象 -->
<bean class="java.util.Date" id="now"/>
<bean class="com.itheima.service.impl.AccountServiceImpl" id="accountService">
<constructor-arg value="泰斯特" name="name"/>
<constructor-arg value="18" name="age"/>
<constructor-arg name="birthday" ref="now"/>
</bean>
value用于String或基本类型;
ref用于指定其他的bean类型属性,但这些bean必须是在Ioc容器中出现过的bean对象。
3.2 set方法注入
<bean class="com.itheima.service.impl.AccountServiceImpl2" id="accountService2">
<property value="TEST" name="name"/>
<property value="21" name="age"/>
<property name="birthday" ref="now"/>
</bean>
name属性对应的是set函数中去掉set的所有字母,全部改为小写
3.3 集合注入
<!-- 复杂类型的注入/集合类型的注入用于给List结构集合注入的标签:
list array set
用于个Map结构集合注入的标签:map props 结构相同,标签可以互换 -->
<bean class="com.itheima.service.impl.AccountServiceImpl3" id="accountService3">
<property name="myStrs">
<set>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</set>
</property>
<property name="mySet">
<list>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</list>
</property>
<property name="myMap">
<props>
<prop key="testC">ccc</prop>
<prop key="testD">ddd</prop>
</props>
</property>
<property name="myProps">
<map>
<entry value="aaa" key="testA"/>
<entry key="testB">
<value>BBB</value>
</entry>
</map>
</property>
</bean>