spring注解开发(纯注解开发模式)(2)
目录
一、spring配置文件的取代。
(1)基本介绍。
(2)项目(工程)环境。
(3)创建新包(config)、new配置类(SpringConfig)。
<1>注解@Configuration。(标明配置类)
<2>注解@ComponentScan。(扫描注解)
(4)替换原测试类代码。
<1>AnnotationConfigApplicationContext。
二、spring纯注解开发模式的注意事项。
(1)注解@Configuration、@ComponentScan的补充说明。
(2)初始化容器方式的转变。
- 引言:本篇博客的案例(环境搭建)都在上一篇博客详细展现。
spring注解开发(spring注解定义(配置)bean)(1)-CSDN博客
一、spring配置文件的取代。
(1)基本介绍。
- spring3.0后升级了纯注解开发模式。也就是使用Java类去替代spring的配置文件。开启了spring快速开发的赛道模式。
(2)项目(工程)环境。
- 现在项目中的spring配置文件中只使用标签<context:component-scan ...>扫描指定包下的实体类。需要进行修改(不写配置文件)让项目彻底变成纯注解开发的spring项目。
- 其中实体类BookServiceImpl、BookDaoImpl各自使用了注解@Service、@Repository配置了bean。
package com.fs.service.impl; import com.fs.service.BookService; import org.springframework.stereotype.Service; @Service public class BookServiceImpl implements BookService { @Override public void save() { System.out.println("book service save..."); } }
package com.fs.dao.impl; import com.fs.dao.BookDao; import org.springframework.stereotype.Repository; @Repository("bookDao") public class BookDaoImpl implements BookDao { @Override public void save() { System.out.println("book dao save..."); } }
(3)创建新包(config)、new配置类(SpringConfig)。
- 具体操作:让SpringConfig这个类代替之前创建的spring配置文件。
- 包结构。接口、实体类层次如下所示。
<1>注解@Configuration。(标明配置类)
- 这个注解写上后,就代表这是spring的配置类。
<2>注解@ComponentScan。(扫描注解)
- 代替标签<context:component-scan ...>的扫描指定包下类的注解作用。
(4)替换原测试类代码。
- 基于XML配置文件的测试类。使用ApplicationContext容器加载spring配置文件并获取bean。但是纯注解开发模式不需要这种写法。
package com.fs.test; import com.fs.dao.BookDao; import com.fs.service.BookService; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) { //使用类路径加载配置文件 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); BookDao bookDao = (BookDao) context.getBean("bookDao"); System.out.println(bookDao); System.out.println("======================="); BookService bookService = context.getBean(BookService.class); System.out.println(bookService); } }
- 但是现在spring配置文件已经被新建的配置类(SpringConfig)代替。所以测试类的获取bean的方式的代码也需要进行修改。
- 新建测试类(AppForAnnotation)
<1>AnnotationConfigApplicationContext。
- 将平常加载配置文件的实现类ClassPathXmlApplicationContext替换成 AnnotationConfigApplicationContext。
- 其它的获取bean、打印输出得到代码不需要修改。
package com.fs.test; import com.fs.config.SpringConfig; import com.fs.dao.BookDao; import com.fs.service.BookService; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class AppForAnnotation { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); BookDao bookDao = (BookDao) context.getBean("bookDao"); System.out.println(bookDao); System.out.println("======================="); BookService bookService = context.getBean(BookService.class); System.out.println(bookService); } }
- 实际测试类的运行结果如下。
- 将配置文件替换成配置类,无非就是换一种使用方式:把配置文件的信息替换成另外一种描述形式。
二、spring纯注解开发模式的注意事项。
(1)注解@Configuration、@ComponentScan的补充说明。
- 注解@Configuration用于设定当前类为配置类。(对标spring配置文件)
- 注解@ComponentScan用于扫描设定的路径(xxx.xxx...)。
- 注意这个注解只能添加一次。若当有多个需扫描的路径时,使用数组格式("{}")添加。
- 进入@ComponentScan注解查看其属性value。发现其类型是String的数组。
- 简单演示(多个路径扫描)。
- 这样看起来好像"多此一举",但实际是有"说法"的。后面的学习时,当我们的bean足够多的时候,某些bean是不能去随便加载的!
(2)初始化容器方式的转变。
- 从读取spring配置文件初始化容器对象——>转变成读取Java配置类初始化容器对象。
- 加载配置类初始化ApplicationContext容器对象。
- 加载配置文件初始化ApplicationContext容器对象。