Spring的IOC和DI
IOC
IOC是为了创建对象,然后交给Spring管理对象的生命周期。利用spring的IOC创建对象有两种方式:
- 通过spring的xml配置文件,利用bean来创建对象
- 通过四大版型标签来设置(,@Service,@Controller)
通过xml配置
<!--xml配置文件-->
<beans>
<!--id:给创建的对象起个名字,通常是首字母小写的类名。id不能重复-->
<!--class:类的全限定名-->
<bean id="user" class="com.manye.www.User"/>
</beans>
原理:本质上是通过反射来创建对象
通过四大版型标签来创建对象
spring的四大版型标签是为了方便创建对象而开发出来的,这四个标签本身的功能都是一致的,也就是说你可以只用一个标签来创建对象(不建议),但是为了规范我们通常在不同的场合使用不同的注解
- @Component:用与处理不好辨别的对象
- @Repository:表明这是一个DAO层(与数据库交互)的注解
- @Repository:表明这是一个Service层(处理业务)的注解
- @Controller:表明这是一个表现层(和前端页面交互)的注解
DI
IOC是创建对象,那么如何把Spring创建的对象注入到我们定义的字段, 而且创建对象的时候对象有时还会需要初始化字段和构造器。这时候DI就出现了。
通过xml注入初始化数据
<!--xml配置文件-->
<beans>
<bean id="user" class="com.manye.www.User">
<!--注入构造器name代表构造器的参数的名字-->
<constructor-arg name="name" value="will"/>
<constructor-arg name="age" value="will"/>
<!--注入常量-->
<property name="要注入的字段名">
<value>要注入的值</value>
</property>
</bean>
</beans>
####把Spring创建的对象注入到字段
- 通过@Autowired注解
@Autowired
private User user; - 通过@Resource注解
@Resource
private User user;
@Autowired: 是先按类型去找,找不到再按名字去找
@Resource: 是先按名字去找,找不到再按类型去找