为实现低内聚高耦合的设计,spring便引入了IOC跟DI
1.什么是ioc
ioc就是一个巨大的容器,里面保存很多对象的实例,主要设计ioc控制反转,即将对象的创建的控制权交给ioc,由ioc管理bean的创建及管理,ioc容器创建的对象叫做bean对象。
那么怎么能将其加入到ioc容器中,那么就需要在类上加上@Component,为了更好的区分这个bean来自哪一层,又引入了
-
@Controller (标注在控制层类上)
-
@Service (标注在业务层类上)
-
@Mapper(标注在数据访问层类上)
那么我加入到了ioc容器中我如何实现将bean引入到我的类中去呢?那么便需要用到DI了。
2.什么是DI
DI就是依赖注入,是指IOC容器要为应用程序去提供运行时所依赖的资源,而资源指的就是对象。
@Autowired注解,默认是按照类型进行自动装配的(去IOC容器中找某个类型的对象,然后完成注入操作),思维比骄傲活跃的可能会发现了,万一ioc中有两个类型相同的bean呢?当然你能想到的spring早就想了针对上述问题Spring提供了以下几种解决办法
-
@Primary
-
@Qualifier
-
@Resource
假如我有两个bean都继承了demoService,一个是service1一个是service2倘若我需要的是service1便使用@Primary注解添加上那么就默认指定依赖注入service1.
@Qualifier指定要注入bean的名称
@Qualifier注解不能单独使用,必须配合@Autowired使用
使用@Resource注解:是按照bean的名称进行注入。通过name属性指定要注入的bean的名称。
@Autowired跟@Resource区别就是前者首先根据类型注入,后者首先根据名称注入