【Spring】:IOC容器通过 Java 注解和 Java 代码方式依赖注入

1、注解

在之前的内容中说过,有三种方式完成依赖注入,那么这篇内容主要了解一下通过通过 Java 注解和 Java 代码方式依赖注入完成依赖注入。这三种方式都可以完成配置,但各有优劣。

Java 注解的方式中使用了一点 XML,而 Java 代码使用了注解。这两种方式都可以完成注解。当然这两种方式差不多,唯一的却别只是为了省略XML。

2、Java 注解

在这种方式中,我们还是需要使用到 XML的,那么下面我们先回顾一下XML如何完成配置的。
在这里插入图片描述
使用注解替代XML的配置,需要使用到如下注解:

  1. @Component:使用在类上,用于实例化Bean,对类所在的层没有任何要求
  2. @Controller:使用在web层类上的,用于实例化Bean,只能用于web层
  3. @Service:使用在service层类上的,用于实例化Bean,只能用于service层
  4. @Repository:使用在dao层类上的,用于实例化Bean,只能用于dao层
  5. @Autowired:使用在字段上用于根据类型注入
  6. @Qualifier:需要和@Autowired一起使用,根据名称进行依赖注入
  7. @Resource:相当于@Autowired@Qualifier的结合
  8. @Value:使用在普通字段上
  9. @Scope :标注Bean的使用范围
  10. @PostConstruct:使用在方法上,用于标注该方法是Bean的初始化方法
  11. @PreDestroy:使用在方法上,用于标注该方法是Bean的销毁方法

具体的使用方式如图:

  • 配置:在类上添加注解配置 Bean
    在这里插入图片描述

  • 需要在XML的<beans>标签上添加两句代码:

    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context.xsd"
    

    在这里插入图片描述

  • 需要添加组件扫描,用于告诉IOC容器那些类进行了注解。只需要写入一行代码就可以自动扫描:
    <context:component-scan base-package="包名,那些包下面存在注解"/>

3、Java 代码

在上面讲述的这种注解方式,虽然不是通过XML进行配置的,但还是使用了XML文件。而这种方式和上述方式差不多,但没有使用 XML 了。

在使用上述注解进行配置时,出现一些是无法通过注解进行替代的:

  1. 非自定义的Bean,在某些时候需要用到第三方类,而在使用这些类的时候无法使用注解,因为你无法去修改这些第三方类的源码
  2. 加载 properties 文件的配置,properties文件是用于存放一些参数,例如数据库连接参数等等,而在XML中可以通过<context:property-placeholder>标签将文件中的数据库引入,通过${}访问。
  3. 组件扫描的配置<context:component-scan>
  4. 引入其他文件 <import>

而“新”注解完全可以解决上述四点,需要注解如下:

  1. @Configuration:用于指定当前类是一个Sping的配置类,当创建容器时会从该类上加载注解。这个注解是重点,在后面的 Spring 系列学习中会经常遇见
  2. @ComponentScan:用于指定Spring 在初始化容器时需要扫描的包。
  3. @Bean:使用在方法上,标注该方法的返回值存储到Spring容器中
  4. @PropertySource:用于加载roperties 文件中的配置
  5. @Import:用于导入其他配置类

在这里插入图片描述
在这里插入图片描述
上述五个注解使IOC容器彻底摆脱XML配置,使配置更加简单,而两种方式到底谁更加好,没人知道这个答案,我只能说存在即合理,各有优缺罢了。

因为彻底抛弃了XML文件,那么容器的使用也需要修改了,因为在之前容器的使用中,我们是通过ClassPathXmlApplicationContext实例化的接口,而现在不在使用XML,则实例化接口的类也需要改变了,具体使用如下:

在这里插入图片描述
使用IOC容器的时候,只是修改了实例化接口的类,其他并没有改变。



如有错误请及时私信作者!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值