Spring注解

一、用于创建对象的注解

  1. 作用:和XML配置文件中编写一个<bean>标签实现的功能相同

  2. 注解

    @Component :

      作用:用于把当前对象存入 Spring 容器中

      属性:value :用于指定 bean 的 id ,若不写时,默认是当前的类名-首字母改小写

  • 以下三个注解作用和属性与Component一模一样

    @Controller :

      一般用于表现层

    @Service :

      一般用于业务层

    @Repository :

      一般用于持久层

例子:

1.配置bean.xml 

2. 在类上加上注解

3.通过注解使用此类

 

二、用于注入数据的注解

  1. 作用:和XML中的bean标签写一个<property>标签的作用相同

  2. 注解(以下前三个注解都只能注入bean 类型的数据,基本类型和String 类型无法使用。集合类型的注入只能通过 XML 实现)

    @Autowired :

      作用:自动按照类注入。只要容器中有唯一的一个 bean 对象类型和要注入的变量类型匹配(即例子的 IAccountDao),就可以注入成功

         若有两个 bean 对象匹配,则会根据注解下创建的 对象 去匹配(即例子的accountDao),对象匹配不对就会报错

         若一个 bean 都没有匹配到,报错

      出现位置:可以写在变量上,可以写在方法上

      注意:在使用此注解注入时,set 方法就不是必须的了

    @Qualifier :

      作用:在按照类中注入的基础上,再按照名称注入。

      属性:value :用于指定注入 bean 的 id 

      注意:必须和 @AutoWired 配合使用

    @Resource :

      作用:直接按照 bean 的 id 注入,它可以独立使用

      属性:name :用于指定 bean 的 id

 

    @Value :

      作用:用于注入基本类型和 String 类型的数据

      属性:value :用于指定数据的值。

      注意:它可以使用 Spring 中的 SpEl(也就是Spring的 el 表达式即:${ 表达式 })

例子:

现在容器里有的对象:

 

又来一个DAO实现类

 

 

1. 注解标后,先按照IAccountDao 这个类型去容器里找是否有这个对象

 

 2. 在容器里找到了(跳过 key 直接找value)

 

 

 

三、用于改变作用范围的注解

  1. 作用:和在bean标签中使用scope属性实现的功能相同

  2. 注解

    @Scope :

      作用:用于指定 bean 的作用范围

      属性:value:指定范围的取值,常用取值:singleton(单例对象,每次创建新对象) / prototype

例子:

 

 

四、生命周期相关的注解

  1. 作用:和在bean标签中使用 init-method 和 destroy-method 的作用相同

  2. 注解

    @PreDestroy

      作用:用于指定销毁方法

    @PostConstruct

      作用:用于指定初始化方法

例子:

 

五、新注解

@Configuration

  作用:指定当前类是一个配置类,作用和 bean.xml 一样

  注意:当配置类作为 AnnotationConfigApplicationContext 对象创建的参数时,该注解可省略不写

@ComponentScan

  作用:通过注解指定 Spring 再创建容器时要扫描的包

  属性:value / basePackages :指定创建容器时要扫描的包名。这两个属性作用一样。数组类型

  使用此注解等同于在XML里配置了<context : component-scan  base-package="XXX.XXX"></context : component-scan>

@Bean

  作用:用于把当前方法的返回值作为 bean 对象存入 Spring 的 IOC 容器中

  属性:name:用于指定 bean 的 id,当不写时默认值是当前方法的名称

  注意:若方法有参数,Spring 框架会去容器中查找有没有可用的 bean对象,查找方法和 AutoWired 相同

例子:

 

以上:加上@Bean 注解后,就相当于在配置里加上了<bean>标签

 测试是否单例的例子:

 

 配置如下:配置Scope(prototype)后是单例了

 

 

 

对比component和controller:https://www.cnblogs.com/javaboy2018/p/9039501.html

posted @ 2020-05-27 15:23  物联网女强人  阅读(204)  评论(1编辑  收藏  举报