SpringBoot控制反转和依赖注入

 

目录

 

一、内聚和耦合

二、分层解耦

三、具体实现

四、bean的组件扫描

五、bean注入


一、内聚和耦合

        在了解分层解耦的概念之前我们我们要去先了解一下内聚和耦合。内聚:通常将的是软件中各个模块之间的功能联系。耦合衡量软件各个模块之间的依赖、关联的程度。一个项目中各个模块之间相互联系越紧密则耦合性越高,模块的独立性就越低,反之亦然。软件设计的原则:高内聚低耦合。在上一篇文章我们搭建了一个简单的三层架构。

实现了service层和dao层的耦合。

实现了service和controller层的耦合。

二、分层解耦

        从上面我们可以看出各个模块之间存在一些耦合,我们应该如何进行解耦呢?如果直接删除上述高亮显示代码会报错,我们会提供一个容器去存储创建的对象,我们从容器中取需要的对象。对象该如何交给容器进行管理?容器怎么提供所依赖的资源?涉及到一些新的概念:控制反转、依赖注入和Bean对象。

        控制反转:Inversion of Control,简称IOC。对象创建控制权由程序自身转移到外部(Spring容器)。

        依赖注入:Dependency injection,简称DI。容器为应用程序提供运行时,所依赖的资源。

        Bean对象:IOC 容器中创建、管理的对象。

三、具体实现

@Component:指定一个普通的Bean,可以作用在任何层次。
@Controller:指定一个控制器组件Bean。
@Service:指定一个业务逻辑组件Bean。
@Repository:指定一个数据访问组件Bean。
@Scope:指定 Bean 实例的作用域。
@Value:指定Bean 实例的注入值

        在声明bean 的时候,可以通过value属性来指定Bean的名字,如果没有指定,默认为类名首字母小写。在springboot集成web开发中,声明控制器bean只能用@controller。

四、bean的组件扫描

        前面说到的bean的四大注解(@Repository、@Service、@Controller和@Component),要想生效还需要被注解@ComponentScan扫描。@ComponentScan注解虽然没有显示配置,但是实际上已经包含在启动类声明注解@SpringBootApplication中,默认的扫描范围是启动类所在包(com.example.demo)及其子包。

如果需要扫描的com.example.demo之外的包,可以通过@ComponentScan进行设置@ComponentScan({“dao”,"com.example.demo"}),这种方式不推荐使用。推荐放在启动类所在包。

五、bean注入

       @Autowired:指定要自动装配的对象。默认按类型进行装配,换一句话说就是去IOC容器中找指定类型的bean对象,然后完成注入。如果有两个类型一样的bean会报错。

        可以通过一下几种方式进行解决:

@Primary:用于标记一个或多个Bean作为首选的候选者。

@Qualifier:指定要自动装配的对象名称,通常与Autowired 联合使用。

@Resource:指定要注入的对象,默认根据名称进行区分。

    

@Autowired是spring框架提供的注解,而@Resource是JDK提供的注解。@Autowired默认是按照类型注入,而@Resource默认是按照名称注入。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值