当前位置: 首页 > news >正文

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容器对象。

相关文章:

  • MobaXterm通过ssh远程连接Ubuntu的方法
  • 【重磅发布】OmniParser V2-开启GUI自动化新时代
  • 【Python爬虫(26)】Python爬虫进阶:数据清洗与预处理的魔法秘籍
  • LeetCode 热题 100_搜索插入位置(63_35_简单_C++)(二分查找)(”>>“ 与 “/” 对比)
  • 3、Kubernetes 集群部署 Prometheus 和 Grafana
  • Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
  • 有向图的强连通分量: Kosaraju算法和Tarjan算法详解
  • Flink CDC详解
  • 【Python】迭代器与生成器详解,附代码(可迭代对象、定义、实现方式、区别、使用场景)
  • 深入理解 SQL 注入漏洞及解决方案
  • 56. 合并区间 (LeetCode 热题 100)
  • 十大排序算法
  • Java-11
  • Enterprise Architect 16 下载、安装与无限30天操作
  • Piantor Keyboard:开源机械键盘项目介绍
  • 通用参考模型
  • < OS 有关 > Ubuntu 24 SSH 服务器更换端口 in jp/us VPSs
  • Linux中使用Docker安装DIFY搭建本地支持库和Agent
  • 如何在Ubuntu服务器上快速安装GNOME桌面环境
  • Python 库自制 Cross-correlation 算法(当采样点需要进行位移进行匹配)
  • 刚开始做网站布局很吃力 怎么办/谷歌排名优化入门教程
  • 帮人做视频的网站/百度一下你就知道百度一下
  • 软件开发公司简介模板/成都seo顾问
  • 手机开发商/上海百度搜索排名优化
  • 成都html5网站建设/短视频seo关键词
  • 美国哪个网站做diy电脑/seo排名是什么