Spring 基于注解和XML混合方式的使用

学习基于注解的IoC配置,首先要有一个认知,即注解配置和xml配置要实现的功能都是一样的,都是要降低程序之间的耦合。只是配置的形式不一样。
在讲价注解配置时,把之前Spring的xml配置内容改为使用注解逐步实现。
IoC注解使用方法

  • 第一步:spring配置文件中,配置context:component-scan标签
    在这里插入图片描述
  • 第二步:类上面加注解 @Component,或者他的衍生注解@Controller、@Service、@Repository

在这里插入图片描述
常用注解
IoC注解(创建对象)
相当于:

<bean id="" class=""></bean>

Component注解

  1. 作用:
    把资源让spring来管理。相当于在xml中配置一个bean

  2. 属性
    value:指定bean的id。如果不指定value属性,默认bean的id是当前类的类名,首字母小写

Controller&Service&Repository注解
他们三个注解都是针对@Component的衍生注解,他们的作用及属性都是一模一样的。他们只不过是提供了更加明确的语义化。
注意:如果注解中有且只有一个属性要赋值时,且名称是value,value在赋值时可以不写。

  • @Controller:一般用于表现层的注解
  • @Service:一般用于业务层的注解
  • @Repository:一般用于持久层的注解

DI注解(依赖注入)
相当于:


@Autowired

  • @Autowired默认按类型装配(byType)
  • @Autowired是由AutowiredAnnotationBeanPostProcessor类实现
  • @Autowired是spring自带的注解
  • @Autowired默认情况下要求依赖对象必须存在,如果需要允许null值,可以设置他的required属性为false,如果:@Autowired(rerequired=false)
  • 如果想按名称装配(byName)可以结合@Qualifier注解进行使用

@Qualifier

  • 在自动按照类型注入的基础上,在按照Bean的id注入
  • 他给字段注入时不能独立使用,必须和@Autowired一起使用
  • 但是给方法参数注入时,可以独立使用

@Resource

  • @Resource默认是按名称装配(byName),可以通过@Resource的name属性指定名称,如果没有指定name属性,当注解写在字段上时,默认取字段名称进行按名称查找,当找不到与名称匹配的bean时才按照类型进行装配。
  • @Resource属于J2EE JSR250规范的实现
  • 但是需要注意的是,如果name属性一旦指定,就只会按名称进行装配

推荐使用@Resource注解,因为他是属于J2EE的,减少了与Spring的耦合。这样的代码看起来比较优雅。

@Inject

  • 根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Name
  • 可以作用在变量、setter方法、构造函数上
  • @Inject是JSR330中的规范,需要导入javax.inject.Inject;实现注入。

@value

  • 给基本类型和String类型注入值
  • 可以使用占位符获取属性文中的值
@value(“${name}”)//name是properties文件中的key
private String name 

@Autowired、@Resource、@Inject的区别
1.@Autowired是spring自带的,@Inject是JSR330规范实现的,@Resource是JSR250规范实现的,需要导入不同的包
2.@Autowired、@Inject用法基本一致,不同的是@Autowired有一个request属性
3.@Autowired、@Inject是默认按照类型匹配的,@Resource是按照名称匹配的
4.@Autowired如果需要按照名称匹配需要和@Qualifier一起使用,@Inject和@Name一起使用

改变Bean作用范围注解

  • @Scope:指定bean的作用范围,相当于下面的配置:
<bean id="" class="" scope="">
  • 属性:
    value:指定范围的值。取值:singleton prototype request session globalsession

生命周期相关

  • @PostConstruct
  • @PreDestory
    相当于:
<bean id="" class="" init-method="" destroy-method=""/>

关于注解和XML的选择问题

  • 注解的优势:
    配置简单,维护方便(找到类,就相当于找到了对应的配置)。

  • XML的优势:
    修改时,不用改源码。不涉及重新编译和部署。

  • Spring管理Bean方式的比较
    在这里插入图片描述

发布了13 篇原创文章 · 获赞 3 · 访问量 1001

猜你喜欢

转载自blog.csdn.net/qq_33358408/article/details/104048115