Spring 两大核心IOC和DI

Spring的两大核心是IOC和DI

IOC:控制反转,对象创建的权利交给springApplication容器

DI:依赖注入,注入的是属性

传统意义上创建对象都是new操作。

举个例子:

dao层类:UserDao

service层类:UserService

web(controller)层:UserController

三个层的调用关系为:

web --->  service  --->   dao

这样的情况

web层会new一个service层对象

service层会new一个dao层对象

若是其中一个层的代码更改,也会导致其它层的代码也要做相应修改

三个层之间的耦合度很高,不利于代码维护

Spring对于上面的情况采用IOC和DI

IOC:底层实现是工厂模式和java反射机制

DI:依赖注入,有三种方式,构造函数注入,属性注入,set方法注入,多数情况下采用的set方法注入。

Spring实现对象创建有两种方式:xml配置,注解方式

xml配置方式:配置bean很多,个人觉得还是注解方式比较好

xml配置方式:

User类

属性:name,age

bean的其中一种写法

属性注入的方式,创建一个User对象,名字和年龄为hahahh,18

<bean id="user" class="com.smart.domain.User" >

  <property name="name" value="hahahh" />      <!--property属性,name对应User类里面属性的名字,value表示给属性赋的值,作用等同于setName(String name)方法-->

  <property name="age" value="18" />

</bean>

注解方式

1.设置扫描contaxt ,指定扫描的包全路径如:com.smart.domain

2.在不同的类上放置不同的注解,@Repository   @Service  @Controller 这几个注解的作用都是创建对象用的,没有非要写在哪一层的要求,放在不同的层上只是行业规范

3.domain层@Repository

 service层@service

 web层@controller

4.controller里面调用的service对象采用@Autowired

   @Autowired

   private UserService userService;

   @Autowired自动注入方式,也有其他注解实现注入

最后总结

 控制反转对象创建的由spring容器来创建,创建的就是xml里面配置的bean

 依赖注入: 必须在控制反转的基础上才能进行,是对spring容器创建的对象(bean)属性进行赋值操作,例如对User类里面的name属性进行操作

 
原文地址:https://www.cnblogs.com/shuzhongruyu/p/8863525.html