Spring学习5-注解配置IoC

基于注解配置的IoC和基于xml配置文件配置的IoC效果和目的都是一样的,都是为了解耦,只是换了一种方式而已。

注解分类

用于创建对象的

@Component

  • 作用:相当于在spring的xml配置文件中写了一个bean标签。

  • 属性:

    • value:用于指定bean的id。当不写时,默认值是当前类名首字母改小写。例如:accountServiceImpl
  • 由此衍生的三个注解:

    • @Controller:一般用于业务层
    • @Service:一般用于表现层

    • @Repository:一般用于持久层

      他们的作用以及属性和@Component完全一样。他们的出现是spring框架为我们提供更明确的语义化来指定不同层的bean对象。

用于注入数据的

用于注入其他bean类型的

@Autowired

  • 作用:自动按照类型注入。根据要注入的数据的数据类型去容器中寻找,只要容器中有唯一类型匹配,则可以自动注入。
  • 如果有多个类型匹配,会先按照类型找到符合条件的对象,然后再用变量名作为bean的id,从容器中继续查找,如果找到则仍可以注入成功,否则报错
  • 当使用此注解注入时,set方法就可以省略了。
  • 属性:
    • required:是否必须注入成功。默认值为true,没有匹配的对象就报错

@Qualifier

  • 作用:在自动按照类型注入的基础之上,再按照bean的id注入。在给类成员注入时,它不能独立使用。
  • 属性:
    • value:用于指定bean的id

@Resource

  • 作用:直接按照bean的id注入,由J2EE提供,需要导入包javax.annotation.Resource,去mvn仓库下载jar包即可。
  • 属性:
    • name:用于指定bean的id

以上三个注解都只能用于注入其他bean类型,而不能注入基本类型和String

用于注入基本类型和String类型的

@Value

  • 作用:注入基本类型和String类型数据。
  • 属性:
    • value:用于指定要注入的数据,它支持SpringEL表达式。
    • spring的el表达式:${表达式}

用于改变作用范围的

@Scope

  • 作用:用于改变bean的作用范围,取值的范围和xml中的配置相同。
  • 属性:
    • value: 用于指定范围。

和生命周期相关的(了解)

@PostContruct

  • 作用:用于指定初始化方法,和配置文件中init-method属性是一样的。

@PreDestroy

  • 作用:用于指定销毁方法,和配置文件中destroy-method属性是一样的。

注解与XML比较

  • 注解的优势: 配置简单,维护方便(我们找到类,就相当于找到了对应的配置)。
  • XML的优势: 修改时,不用改源码。不涉及重新编译和部署。

:转载文章请注明出处,谢谢~