Spring 注解开发

注解开发

1、原先 xml 配置文件管理 bean 的方式

1
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>

其中包含三个信息点:

  1. 配置的是一个 bean
  2. 配置的 bean 设置类型
  3. 配置的 bean 起个名字

2、通过纯注解的方式管理 Bean

由于 bean 的类型是 class="com.itheima.dao.impl.BookDaoImpl",因此想到直接将注解写在这个类中 @Component("bookDao"),那么以上信息中 “配置的 bean 设置类型” 和 “配置的 bean 起个名字” 就已经知道了,那么第一点 “配置的是一个 Bean” 如何去描述它呢?

1
2
3
4
5
6
@Component("bookDao")  
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}

在项目下新建一个 config 包,在包下新建一个 SpringConfig 的类;

  1. 在类上加上 @Configuration 注解表明是 Spring 配置类(代表 Spring 的 xml 配置文件框架)
  2. @ComponentScan 设置 bean 扫描路径

通过以上两点,就可以说明 “配置的是一个 Bean”,且告知了扫描路径。通过这样的方式完全可以取代原来的 xml 方式

1
2
3
4
5
6
//声明当前类为Spring配置类(代表Spring的xml配置文件框架)  
@Configuration
//设置bean扫描路径,多个路径书写为字符串数组格式(代表原先xml中的那句代码)
@ComponentScan({"com.itheima.service","com.itheima.dao"})
public class SpringConfig {
}

01-xml转纯注解开发.png

那么原先在类中创建容器的那句代码也需要改一下

1
2
3
4
5
6
7
//加载配置文件初始化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

//改为如下

//AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

小结

  • Java 类代替 Spring 核心配置文件
  • @Configuration 注解用于设定当前类为配置类
  • @ComponentScan 注解用于设定扫描路径,此注解只能添加一次,多个数据需要使用数组格式

附注信息

衍生注解

Spring 提供 @Component 注解的三个衍生注解,衍生的注解功能和 Component 注解一样,只是方便我们区分

  • @Controller:用于表现层 bean 定义
  • @Service:用于业务层 bean 定义
  • @Repository:用于数据层 bean 定义

包扫描若有多个路径

如果有多个路径,需要使用字符串数组格式,如:

1
{"com.itheima.service","com.itheima.dao"}