Spring三种配置方式

2023-05-16

Spring有以下几种常用的配置方式

  • 1. 基于xml的配置
  • 2. 基于注解的配置
  • 3. 基于Java的配置

1. 基于xml的配置

在Spring1.x时代,都是基于xml来进行配置,用xml文件来管理bean之间的关系

现在让我们来通过xml装配Bean:

首先需要两个实体类,User和Dog

User.java

public class User {
    private String name;
    private int age;
    private Dog dog;
	//get、set、toString方法略
}

Dog.java

public class Dog {
    private String name;
    private String breed; //品种
    private int age;
   //get、set、toString方法略
}

配置文件: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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="jackma" class="com.tyq.dto.User">
        <property name="name" value="jackma" />
        <property name="age" value="55" />
        <property name="dog" ref="jm" />
     </bean>

    <bean id="jm" class="com.tyq.dto.Dog">
        <property name="name" value="jack" />
        <property name="breed" value="金毛" />
        <property name="age" value="2" />
    </bean>
</beans>

测试:

public class test {
    public static void main(String args[]){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = (User) context.getBean("jackma");
        System.out.println(user);
    }
}

执行结果:在这里插入图片描述
这里调用了User的toString方法打印了用户信息,其中Dog属性也调用了它自己的toString方法打印了dog对象的信息

2. 基于注解的配置

由于项目越来越大,过多的使用xml配置会变得不太方便(经常要在java文件和xml文件之间来回切换)
所以在Spring2.x时代,Spring提供了声明bean的注解,大大减少了配置量

注解的配置原则是:基本配置使用xml(如数据库的配置),业务配置使用注解

Bean的定义:
在bean的上面使用@Component或其子类(@Repository、@Service、@Controller)来定义bean

Bean的注入:(以下注解添加到bean的属性中)

  • @required注解:应用于bean的setter方法,表示被标注过的属性必须在XML文件中配置,否则会出现异常
  • @Autowire:在属性上使用@Autowire注解可以进行自动装配,减少代码
  • 当需要创建多个相同类型的bean,并且只需要装配其中一个时,可以使用@Qualifier和@Autowire用来指定装载其中一个bean

例如这里有一个保存用户的操作:
先由控制层(Controller)调用服务层(Service),
再由服务层调用Dao层(数据访问层)

使用注解如下(这里不写具体的业务逻辑,只是介绍调用过程以及注解)


控制层:UserController.java

@Controller
public class UserController {
    @Autowired  //自动装配
    private UserService userService;
    
    //保存用户
    public String save(User user) {
        userService.save(user);
        return "保存成功";
    }
}

服务层Service:UserService.java

@Service
public interface UserService {

    //保存用户
    void save(User user);
}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;


    @Override
    public void save(User user) {
        userDao.save();
    }
}

Dao层:UserDao.java

@Repository
public interface UserDao{
    void save();
}
@Repository
public class UserDaoImpl implements UserDao {
    @Override
    public void save() {
        //保存数据的操作
    }
}

3. 基于Java的配置

Spring3.0以后,提供了Java配置的能力,Spring4.x和SpringBoot都推荐使用Java配置
首先要说明以下两个注解:

  • @Configuration,表示修饰的类可以作为bean的来源(通过注解来获取bean)
  • @Bean,表示实例化一个bean,等同于在xml里面添加一个bean 被@Bean修饰的方法名就是该bean的name

现在让我们来通过Java代码来装配Bean:

配置文件,DemoConfig.java(对应applicationContext.xml)

@Configuration
public class DemoConfig {
    @Bean
    public User jackma(){
        return new User();
    }
    @Bean
    public Dog dog(){
        return  new Dog();
    }
    @Bean  //两个狗
    public Dog haqi(){
        return new Dog();
    }
}

两个实体类,User,Dog

User.java

@Component("jackma")
public class User {
    private String name;
    private int age;
    private Dog dog;

  //get,set方法略
}

Dog.java

public class Dog {
    private String name;
    private String kind;
    private int age;
    //get,set方法略
}

test.java,这里使用注解的方式加载Spring容器

public class test {
    public static void main(String args[]){
        ApplicationContext context = new AnnotationConfigApplicationContext(DemoConfig.class);
        User user = (User) context.getBean("jackma");
        System.out.println(user);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring三种配置方式 的相关文章

随机推荐

  • Oh My Posh美化CMD、Anaconda Prompt解决方案

    网上搜到的Oh My Posh安装配置都是针对power shell的 xff08 我参考这篇成功配置了针对power shell的字体和主题 xff09 期间遇到了无法加载文件WindowsPowerShell profile ps1的问
  • ROS常用知识点总结——CRC8校验

    CRC8校验 CRC校验 xff0c 此处文章看懂即可 xff0c 需要注意的是标准多项式是固定的校验值 xff0c 无需纠结为什么选择0x31 xff0c 生成的标准多项式 校验后的crc占一个字节8比特 xff0c 发送的时候 xff0
  • ROS2学习笔记——知识点

    1 ROS2和ROS的区别
  • ROS主从机时间同步

    多机时间同步设置 在多机编队这一项目中 xff0c 多机时间同步设置是至关重要的一步 编队的过程中 xff0c 由于各机器人的系统时间不同步会带来很多问题 多机时间同步分为两种情况 xff0c 分别为主从机器人均联网和均断网的情形 1 主从
  • jeston nano使用VNC修改远程桌面分辨率

    1 终端单次修改分辨率 xff0c 重启后无效 启动nano后 xff0c 远程vnc链接 xff0c 远程桌面显示的分辨率很低 xff0c 在终端输入以下命令 xff0c 实现分辨率远程修改 xrandr fb 1024x768
  • 四旋翼无人机起飞重量和电机关系

    无人机起飞重量 通常无人机起飞重量取不超过电机总拉力的40 xff0c 小于40在响应和续航方面比较适中 xff0c 大于40 会导致续航快速降低 xff0c 并且在新版本1 13 2固件中 xff0c 超过60 后会导致高度不稳定 举例
  • Jetson-nano备份需要注意事项

    注意 xff1a 注意 xff1a 此处需要注意 xff1a dev sda1可能到导致文件备份不完整 xff0c 可以直接写为dev sda即可 xff0c 经过实际使用测试 xff0c 不加数字号可用 首先我们要做的准备工作有 xff1
  • jetson nano添加VNC到自启动

    链接 nano配置vnc 自启动采用如下设置 链接 自启动采用图形界面设置
  • 使用darknet_ros不自动启动图像

    使用darknet ros不自动启动图像 为了使程序运行的更加流畅 xff0c 关闭了视频自动弹窗功能 xff0c 需要查看图片的话 xff0c 可以通过 rqt image view查看 xff0c 选中带有darknet字样的话题即可看
  • ubuntu增加交换空间和永久生效

    链接 增加交换空间 链接 永久生效 链接 永久生效
  • ubuntu使用tools工具,解决不能双向复制粘贴问题

    链接 安装open vm tools
  • 用Inkscape制作xfce4窗口管理器xfwm4主题

    在阅读本文前 xff0c 建议先阅读怎样制作xfwm4主题官方教程 xff0c 了解制作xfwm主题需要哪些文件 本文简译自此教程 xff0c 并在其基础上撰写本文 xff0c 点此下载示例svg源文件 一 用Inkscape 批量制作窗口
  • window10下apache安装多版本php

    常规安装 单版本 span class token comment 当前操作是以管理员命令下在apache安装目录的bin下运行 span httpd exe k span class token function install span
  • 自适应中值滤波及matlab实现

    提出原因 常规的中值滤波器 xff0c 在噪声的密度不是很大的情况下 xff08 根据经验 xff0c 噪声的出现的概率小于0 2 xff09 xff0c 效果不错 但是当概率出现的概率较高时 xff0c 常规的中值滤波处理后 xff0c
  • Qt--打印文档

    Qt Print Support模块提供了对打印的支持 最简单的 xff0c 只需使用一个QPrinter类和一个打印对话框QPrintDialog类就可以完成文档的打印操作 本节简单介绍打印文档 xff0c 打印预览和生产pdf文档 新建
  • 数据结构---拓扑排序详解

    前言 The time of test family is best Name Willam Time 2017 3 6 1 拓扑排序的介绍 对一个有向无环图 Directed Acyclic Graph简称DAG G进行拓扑排序 xff0
  • @androidx.annotation.Nullable错误解决

    今天更新了Androidstudio版本至3 2 0 xff0c 在自动创建构造方法的时候 xff0c 每个参数前增加了 64 androidx annotation Nullable xff0c 并且编译报错 xff0c 可以手动删除使项
  • java判断字符串为空

    Java空字符串与null的区别 xff1a 1 类型 null表示的是一个对象的值 xff0c 而并不是一个字符串 例如声明一个对象的引用 xff0c String a 61 null 34 34 表示的是一个空字符串 xff0c 也就是
  • UltraISO制作大于4G文件的光盘映像可启动U盘

    在制作包含大于4G的文件的启动U盘时 xff0c 经常发生制作后无法安装的情况 xff0c 下面就给大家介绍一下有关大于4G的文件的光盘映像如何制作U盘启动盘 xff0c 需要的朋友可以看看 无法启动原因 xff1a 在Windows操作系
  • Spring三种配置方式

    Spring有以下几种常用的配置方式 1 基于xml的配置2 基于注解的配置3 基于Java的配置 1 基于xml的配置 在Spring1 x时代 xff0c 都是基于xml来进行配置 xff0c 用xml文件来管理bean之间的关系 现在