首页 专题 文章 代码 归档
Spring注解初识
2020.01.24 13:56 2020.01.24 13:56

初识注解

本节我们来使用以下注解!

通过给bean(实体类)加上某些注解,快速的将bean加入到IOC容器中!

注解分类

目前注解大致分为:

  • @Service:业务逻辑层加该注解
  • @Controller:给控制器层加该注解
  • @Component:其他自定义的杂类,使用此注解
  • @Repository:给数据库层(Dao、数据持久层),添加该注解

某个类上添加任何一个注解,都能将该类加入到IOC容器中,Spring底层并不会去验证你加的注解是否符合,

但是我们推荐该加什么加什么!原因如下:

1、方便团队开发,使不同开发人员明白该类的作用是什么。

2、虽然都能将类交给Spring管理,并且暂时没区别!但万一Spring对某一个注解做了特殊处理(优化等),乱加的话,可能会导致以后的代码维护困难!

使用注解步骤

  1. 给需要添加的组件(类)标上上面四个之一的注解。
  2. 告诉Spring那自动扫描“有注解的类”所存在的包(到applicationContext.xml配置,用到context命名空间)

具体

步骤1:新建包

我们这里新建了如下的包用作测试:

  • com.misiai.bean
  • com.misiai.dao
  • com.misiai.controller
  • com.misiai.service

步骤2:修改配置文件

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd">


    <!--扫描包-->
    <context:component-scan base-package="com.misiai"/>
    <!--com.misiai包下包括:bean、controller包,所以我们具体到com.misiai即可-->

</beans>

步骤3:dao包下,新建BookDao.java类

package com.misiai.dao;


import org.springframework.stereotype.Repository;

@Repository
public class BookDao {

    public BookDao() {
        System.out.println("BookDao 的无参构造!");
    }
}

步骤4:test包下,新建测试类

package com.misiai.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test01 {

    ApplicationContext ap = new ClassPathXmlApplicationContext("applicationContext.xml");

    @Test
    public void test01() {

    }
}

结果:

截图-1579767129

问题:我们这里还未获取该BookDao类,只是容器把它创建了。

根据以前章节可知,如果是配置在xml文件里,我们可以写id,然后通过getBean方法获取该类,那么现在如何获得该类呢?类名首字母小写!

如下:

@Test
public void test01() {
    BookDao bookDao = ap.getBean("bookDao", BookDao.class);
    System.out.println("bookDao = " + bookDao);
}

截图-1579767282

自定义ID

如上,默认id是使用类明的首字母小写构成,那么可以自定义么?肯定可以的!

只需加注解时,给个参数,如下:Misiai

@Repository("Misiai")
public class BookDao {

    public BookDao() {
        System.out.println("BookDao 的无参构造!");
    }
}

然后我们顺带测试注解下,是否默认是单例的:

@Test
public void test01() {
    BookDao bookDao = ap.getBean("Misiai", BookDao.class);
    BookDao bookDao2 = ap.getBean("Misiai", BookDao.class);
    System.out.println(bookDao == bookDao2);
}

结果:是默认是单实例的!

截图-1579767735

多实例

那么问题又来了,如何改成多实例?加@Scope(value="prototype")注解

@Repository("Misiai")
@Scope(value = "prototype")
public class BookDao {

    public BookDao() {
        System.out.println("BookDao 的无参构造!");
    }
}

截图-1579767834

为什么要学xml配置

既然注解这么方便,那为什么前面大篇幅的学习基于xml的配置?

很简单啊,我们自己写的类肯定能加注解,但是别人写的呢?

比如前面使用的数据库连接池,那可不能使用注解!

所以,开发中,一般都是两者结合来用!

细节

要使Spring支持注解,需要满足几个条件:

1、给类上加上注解注解。

2、在xml配置文件里配置。

3、导入aop Jar包。

以上三个条件任意缺失一个都肯能导致报错,或达不到预期!

本节阅读完毕! (分享
二维码图片 扫描关注我们哟