Spring学习(三) 基于xml和注解的IOC案例

Spring IoC配置(xml+注解) 0.配置思路文末有本篇文章的项目源代码可供下载学习此时XML文件相当于一个向导,告诉Spring IoC容器,你不要来我这找各个组件类的配置信息了,你去哪哪哪包下去找吧,那里会标注特定的注解,你看到特定注解就会知道怎么配置各个组件类的信息了.特定注解>>>0.配置思路1.配置pom.xml。 阅读详情

基于 xml 的 IOC 案例

创建数据库

 create table account(
 	id int primary key auto_increment,
 	name varchar(40),
 	money float
 )character set utf8 collate utf8_general_ci;
 
 insert into account(name,money) values('aaa',1000);
 insert into account(name,money) values('bbb',1000);
 insert into account(name,money) values('ccc',1000);

创建接口

IAccountDao

  public interface IAccountDao {
  
      /**
       * 查询所有
       * @return
       */
      List<Account> findAllAccount();
  
      /**
       * 查询一个
       * @return
       */
      Account findAccountById(Integer accountId);
  
      /**
       * 保存
       * @param account
       */
      void saveAccount(Account account);
  
      /**
       * 更新
       * @param account
       */
      void updateAccount(Account account);
  
      /**
       * 删除
       * @param accountId
       */
      void deleteAccount(Integer accountId);
  }

IAccountService

 public interface IAccountService {
  
      /**
       * 查询所有
       * @return
       */
      List<Account> findAllAccount();
  
      /**
       * 查询一个
       * @return
       */
      Account findAccountById(Integer accountId);
  
      /**
       * 保存
       * @param account
       */
      void saveAccount(Account account);
  
      /**
       * 更新
       * @param account
       */
      void updateAccount(Account account);
  
      /**
       * 删除
       * @param accountId
       */
      void deleteAccount(Integer accountId);
  }

创建实现类

AccountDaoImpl

 public class AccountDaoImpl implements IAccountDao {
  
      private QueryRunner runner;
  
      public void setRunner(QueryRunner runner) {
          this.runner = runner;
      }
  
      public List<Account> findAllAccount() {
          try{
              return runner.query("select * from account", new BeanListHandler<Account>(Account.class));
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
  
      public Account findAccountById(Integer accountId) {
          try{
              return runner.query("select * from account where id = ?", new BeanHandler<Account>(Account.class),accountId);
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
  
      public void saveAccount(Account account) {
          try{
              runner.update("insert into account(name, money) values(?,?)", account.getName(),account.getMoney());
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
  
      public void updateAccount(Account account) {
          try{
              runner.update("update account set name = ?, money = ? where id = ?", account.getName(),account.getMoney(),account.getId());
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
  
      public void deleteAccount(Integer accountId) {
          try{
              runner.update("delete from account where id = ?", accountId);
          } catch (Exception e) {
              throw new RuntimeException(e);
          }

AccountServiceImpl

public class AccountServiceImpl implements IAccountService {
  
      private IAccountDao accountDao;
  
      public void setAccountDao(IAccountDao accountDao) {
          this.accountDao = accountDao;
      }
  
      public List<Account> findAllAccount() {
          return accountDao.findAllAccount();
      }
  
      public Account findAccountById(Integer accountId) {
          return accountDao.findAccountById(accountId);
      }
  
      public void saveAccount(Account account) {
          accountDao.saveAccount(account);
      }
  
      public void updateAccount(Account account) {
          accountDao.updateAccount(account);
      }
  
      public void deleteAccount(Integer accountId) {
          accountDao.deleteAccount(accountId);
      }
  }

创建账户实体类

Account

  public class Account implements Serializable {
  
      private Integer id;
      private String name;
      private Float money;
  
      public void setId(Integer id) {
          this.id = id;
      }
  
      public void setName(String name) {
          this.name = name;
      }
  
      public void setMoney(Float money) {
          this.money = money;
      }
  
      public Integer getId() {
          return id;
      }
  
      public String getName() {
          return name;
      }
  
      public Float getMoney() {
          return money;
      }
  
      @Override
      public String toString() {
          return "Account{" +
                  "id=" + id +
                  ", name='" + name + '\'' +
                  ", money=" + money +
                  '}';
      }
  }

创建测试类
AccountServiceTest

  public class AccountServiceTest {
  
      @Test
      public void testFindAll() {
          // 1.获取容器
          ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
          // 2.得到业务层对象
          IAccountService iAccountService = applicationContext.getBean("accountService",IAccountService.class);
          // 3.执行方法
          List<Account> accounts = iAccountService.findAllAccount();
          for (Account account : accounts) {
              System.out.println(account);
          }
      }
  
      @Test
      public void testFindOne() {
          // 1.获取容器
          ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
          // 2.得到业务层对象
          IAccountService iAccountService = applicationContext.getBean("accountService",IAccountService.class);
          // 3.执行方法
          Account account = iAccountService.findAccountById(1);
          System.out.println(account);
      }
  
      @Test
      public void testSave() {
          Account account = new Account();
          account.setName("test");
          account.setMoney(12345f);
          // 1.获取容器
          ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
          // 2.得到业务层对象
          IAccountService iAccountService = applicationContext.getBean("accountService",IAccountService.class);
          // 3.执行方法
          iAccountService.saveAccount(account);
      }
  
      @Test
      public void testUpdate() {
          // 1.获取容器
          ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
          // 2.得到业务层对象
          IAccountService iAccountService = applicationContext.getBean("accountService",IAccountService.class);
          // 3.执行方法
          Account account = iAccountService.findAccountById(4);
          account.setMoney(23456f);
          iAccountService.updateAccount(account);
      }
  
      @Test
      public void testDelete() {
          // 1.获取容器
          ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
          // 2.得到业务层对象
          IAccountService iAccountService = applicationContext.getBean("accountService",IAccountService.class);
          // 3.执行方法
          iAccountService.deleteAccount(4);
      }
  }

配置 bean.xml

 <!--配置dao-->
 <bean id="accountDao" class="com.greyson.dao.impl.AccountDaoImpl">
     <!--注入runner-->
     <property name="runner" ref="runner"></property>
 </bean>

 <!--配置runner-->
 <bean id="runner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype">
     <!--注入数据源-->
     <constructor-arg name="ds" ref="dataSource"></constructor-arg>
 </bean>

 <!--配置数据源-->
 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
     <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
     <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/eesy"></property>
     <property name="user" value="root"></property>
     <property name="password" value="HotteMYSQL"></property>
 </bean>

基于注解的IOC实例

1、Spring 中的新注解:

@Configuration

  • 作用:指定当前类是一个配置类
  • 细节:当配置类作为 AnnotationConfigurationApplicationContext
    对象创建的参数时,该注解可以不写

@ComponentScan

  • 作用:用于通过注解指定 Spring 在创建容器时要扫描的包

  • 属性:

    value : 它和 basepackages 的作用是一样的,都是用于指定创建容器时要扫描的包

使用此注解就等同于在 xml 中配置了:

<context:component-scan base-package="com.greyson"></context:component-scan>

@Bean

  • 作用:用于把当前方法的返回值作为 bean 对象放入 Spring 的IOC容器中

  • 属性:

    name : 用于指定 bean 的 id,当不写时,默认值为当前方法的名称

  • 细节:

    当我们使用注解配置方法时,如果方法有参数,Spring 框架会去容器中查找有没有可用的 bean 对象,

查找的方式和 Autowired 注解的作用是一样的

@Import

  • 作用:用于导入其他的配置类

  • 属性:

    value : 用于指定其他配置类的字节码

当我们使用 Import 的注解之后,有 Import 注解的类就是父配置类,而导入的都是子配置类

@Properties

  • 作用:用于指定 properties 文件的位置

  • 属性:

    value : 指定文件的名称和路径

  • 关键字:classpath , 表示类路径下

重复代码较多,配置类如下所示:

/**
 * spring的配置类,相当于bean.xml
 */
@Configuration   //声明该类是个配置类
@ComponentScan("com.itheima")
@Import({JdbcConfig.class,TransactionConfig.class})
@PropertySource("jdbcConfig.properties")
@EnableTransactionManagement    //事务管理的声明
public class SpringConfiguration {
}

Spring IOC 详解:基于 XML 配置与注解的依赖注入 Spring 框架是 Java 开发中最常用的框架之一,其核心思想之一是 IOC(Inversion of Control,控制反转)。IOC 的核心思想是将对象的创建和依赖关系的管理交给 Spring 容器来处理,从而降低代码的耦合度。本文将深入探讨 Spring IOC 的实现方式,重点讲解基于 XML 配置和基于注解的两种形式。 阅读详情

相关推荐

WSL 运行make提示/lib/modules/xxx/build: No such file or directory. Stop.错误解决办法

WSL运行make提示/lib//modules/xxx文件或目录不存在。 WSL2的内核是修改过的,无法使用 ubuntu上游的内核头文件和modules文件,因此,我们需要手动编译并安装一个版本。

weixin_45668903的博客 1万+

Spring笔记7 基于注解的IoC案例(实现CRUD)

https://www.bilibili.com/video/av47952931 p38~ 文章目录数据库部分在基于xml的案例上修改完整代码项目结构pom.xmlbeans.xml实体类业务层持久层测试方法测试 数据库部分 继续用上次的表 在基于xml的案例上修改 pom.xml不用改 beans.xml名称空间需要修改 在Spring文档中搜索xmlns:context(基于xml...

CoCoNutNut的博客 518

【开关电源篇】开关电源——只需这三个阶段,从电源小白到维修大神

🔌 该篇为的原创文章跳转目录,小二持续更新跳转链接,尽情关注!

2301_81299416的博客 2381

基于xml的ioc案例以及注解ioc案例

1.环境搭建pom.xml <packaging>jar</packaging> <dependencies> <!--spring坐标--> <dependency> <groupId>org.springframework</groupId> <artif...

Hello_MAOSONG的博客 372

【STM32开源实战】基于STM32的智能输液监控系统设计与实现

本文详细介绍了基于STM32F103C8T6主控芯片的智能输液监控系统设计与实现。该系统通过光学液位传感器、温度传感器和红外滴速检测模块实时监测输液状态,利用步进电机自动调节滴速,并通过蓝牙实现数据远程传输,为医院提供了一套低成本、高可靠性的智能输液解决方案。

h6i7j8的博客 761

Xilinx Aurora 8B/10B IP核详解和仿真

Xilinx Aurora 8b/10b IP核的详解,以及使用与仿真示例,对IP核的配置和如何仿真有非常详细的说明,除了对IP核官方文档的内容进行了解析以外,还对GTX引脚的选择等比较容易混淆和不好理解的地方进行了说明。最后对IP核的仿真运行进行了STEP BY STEP 的说明,对仿真的结果也进行了简要的说明。 该文档对Xilinx FPGA和ZYNQ SOC下 AURORA 8B/10B IP核的使用提供了一个快速上手的指导。

weixin_43354598的博客 1万+

Spring(二)IOC:Spring基于XML方式,注解方式两种方式

Spring系列: Spring(一)Spring的概述 Spring(二)IOC:Spring基于XML方式,注解方式两种方式 Spring(三)AOP:面相切面编程详解 Spring(四)spring的事务 目录 1.XML配置方式 1.1.实例化Bean的四种方式 1.2.Bean的作用域 1.3.Bean的生命周期 1.4.Bean属性的依赖注入 2.注解配置方式...

1194

NLP自然语言处理:神经网络语言模型(NNLM)

目录 一、传统语言模型 1.1 稀疏性 1.2泛化能力差 二、神经网络语言模型 2.1 前馈神经网络模型(FFLM) 2.2 循环神经网络模型(RNNLM) 2.2.1循环神经网络模型示例 2.2.2RNN语言模型训练过程 2.2.3RNN语言模型反向传播 2.2.4语言模型评估 语言模型的构建目的是为了对语言中的各要素的分布进行估计,具有较长的研究历史和广泛...

陈宸的博客 1万+

Spring IoC(基于xml和基于注解)

Spring的初衷: 1、JAVA EE开发应该更加简单。 2、使用接口而不是使用类,是更好的编程习惯。Spring将使用接口的复杂度几乎降低到了零。 3、为JavaBean提供了一个更好的应用配置框架。 4、更多地强调面向对象的设计,而不是现行的技术如JAVA EE。 5、尽量减少不必要的异常捕捉。 6、使应用程序更加容易测试。 核心容器 是Spring框架最基础的部分,它提供了依赖注入...

qq_45147812的博客 366

大数据应用技术实验报告一 Hadoop三种模式安装配置

JDK+Hadoop安装配置、单机模式配置 以下操作在SecureCRT里面完成 1.关闭防火墙 firewall-cmd --state 显示防火墙状态running/not running systemctl stop firewalld 临时关闭防火墙,每次开机重新开启防火墙 systemctl disable firewalld 禁止防火墙服务。 2.传输JDK和HADOOP压缩包 Sec...

Ruthless_Childe的博客 3089

【电子电力】IEEE33节点系统参数及拓扑图visio

IEEE33节点系统是一种广泛用于电力系统分析和研究的标准配电网络。该系统具有典型的辐射结构,适用于负载流分析、分布式发电优化及电力系统的可靠性评估。本报告主要基于IEEE33节点系统的拓扑图,讨论其在电子电力系统中的应用。通过MATLAB仿真分析了节点的电压分布、功率损耗等关键参数,并验证了系统的稳定性和有效性。

2401_84610415的博客 1万+

BurpSuite工具HaE插件好用正则收集

数据集合面板里面直接查询捕获到的相关数据内容,省去一个个翻找数据包内容的烦恼。插件捕获到匹配正则表达式的数据包后,可以在。可以对正则条目进行添加、编辑、删除。规则信息管理,我们点击。

墨痕诉清风的博客 643

spring学习笔记:基于XML,注解,配置类的IOC搭建,以一个案例的方式展开

在学习IOC之前,我们先了解一个概念,耦合。耦合指的是程序间的依赖关系,比如类的依赖关系,方法的依赖关系,举个栗子,如果你new了一个对象,就建立了一个耦合关系。注意:我们不能消除程序间的依赖关系,只能尽可能的降低程序的依赖关系。这种降低程序间的依赖关系就叫做解耦。那如何解耦了?在实际开发中,我们应该做到在编译期不依赖,在运行期依赖。通过spring提供的IOC容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。

jocer_zhu的博客 1418

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Spring注解开发和XML开发

Spring 的Xml开发和注解开发

luckly_xixi的博客 2673

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring学习笔记第二天,Spring基于xml的IOC和注解的IOC以及IOC的案例

经过了第一天的学习,我们对spring框架应该有了一定的了解。对于使用xml配置的方式也应该会使用了。今天我们就来学习spring基于注解的IOC以及IOC的案例。 1 Spring中IOC的常用注解 在我们上一天的学习中我们使用的是xml对ioc进行配置,配置的方式如下 <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" scope="" init-method="" destroy-method

Code_Boy_Code的博客 711

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Spring 框架 IOC 注解

在 Spring 框架中,控制反转(IOC)是核心思想之一。传统 XML 配置方式虽能实现 IOC,但存在配置繁琐、维护成本高的问题。而通过代码注解直接声明 Bean 及其依赖关系,大幅简化开发流程,成为现代 Spring 开发的主流选择。本文将系统讲解 IOC 注解的核心用法、常用注解及纯注解架构实践。

m0_61261153的博客 1161

Spring5之IOC操作Bean管理(基于xml和注解)

前几天Spring框架曝出RCE 0day漏洞,可导致远程代码执行 (RCE),使用JDK9及以上版本都有可能受到影响,还好博主用的是稳定的JDK8(JDK8真的是yyds)。本篇文章主要介绍一下spring核心之一的IOC/DI以及他们是如何通过XML和注解的方式实现Bean管理。 一、Spring的核心 Spring是轻量级的开源JavaEE框架,Spring主要用到的设计模式有工厂模式和代理模式,一般而言,工厂模式分为三类:简单工厂模式(Simple Factory)、工厂方法模式(F..

静水流深,沧笙踏歌 2307

Spring IOC的注解配置

Spring IOC的注解配置 (一)简述 上回说到,我们可以使用书写XML配置文件的方式来让spring产生我们需要的Bean对象,并放入容器中。但是,书写配置文件是一件非常繁琐的事情,而且一旦配置文件内容很多,阅读起来也是一件让人头疼的事,所以,我们急需一种部分或者完全摆脱配置文件的配置方式。 下面我们就来看看spring的注解配置方式。注解配置和用配置文件配置相比,只是配置的形式不一样,最终达到的目的是基本相同的。就好比坐飞机去北京和坐高铁去北京,虽然使用的交通工具不一样,但是都达到了去北京的目的。

物是人非,结局始终不美 1万+

【Spring】分别基于XML、注解和配置类实现Spring的IOC(控制反转)

lOC:lnversion of Control 控制反转,简称就是 IOC 控制反转:控制(对象创建权利)被反转 控制反转通过依赖注入(DI)方式实现对象之间的松耦合关系。程序运行时,依赖对象由辅助程序动态生成并注入到被依赖对象中,动态绑定两者的使用关系。Spring IoC 容器就是这样的辅助程序,它负责对象的生成和依赖的注入,然后再交由我们使用。

m0_65277261的博客 1607

Spring之IOC案例分析以及注解案例

day2.......... 一、spring中IOC的常用注解 1.注解创建对象 @Component 2.自动按照类型注入 如果有唯一一个匹配时,直接注入;若有多个匹配,则首先圈出匹配的对象,接着使用变量名称 作为bean的id在圈定的对象中继续查找,若圈中的对象一样则匹配成功,否则匹配失败; 3.该边作用范围和生命周期的注解 二、基于XML...

qq_36964872的博客 510

Java-31 深入浅出 Spring - IoC 基础 启动IoC XML与注解结合的方式 配置改造 applicationContext.xml

这里需要注意,按理来说,我们应该在 WzkServlet 上也写 Compont 和 Autowired 来注入我们的 WzkTransferService,但是实际上呢,Component 和 Servlet 注解是冲突的。这个目的是让 Spring 接管我们的 Bean,而此时,我们可以将这一系列的 Bean 配置都移除出去,使用注解的方式来满足我们的 Bean 管理。接下来我们将刚才的 纯 XML 的模式的代码,改造成 注解 + XML 的方式,解放出一定的 XML 来。

谢谢你的喜欢 我们一起无限进步 6441

Spring IOC基于XML和注解管理Bean(二)

IoC 是 Inversion of Control 的简写,译为“ 控制反转 ”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。

Lifelong learning 1985

Spring 从入门到精通系列 07 —— 基于XML与注解方式的IOC案例编写

本文使用 XML 方式和注解方式实现单表的 CRUD操作,连带巩固 IOC 配置过程。 文章目录一、基于 XML 的 IOC 的案例1.1 导入依赖1.2 账户实体类1.3 业务层接口及实现类1.4 持久层接口及实现类1.5 bean.xml ★1.6 测试方法二、基于注解配置的 IOC 案例2.1 业务层接口实现类2.2 持久层接口实现类2.3 bean.xml ★ 一、基于 XML 的 IOC 的案例 工程目录: 1.1 导入依赖 <dependencies> <dep

秀岩的博客 561

Spring IOC 依赖注入的两种方式:XML和注解

IoC,直观地讲,就是容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在。控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。IoC还有另外一个名字——“依赖注入(Dependency Injection)”。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象地说,即由容器动态地将某种依赖关系注入到组件之中。 依赖注入的原理

楠人的博客-随风而过 5243

Spring框架-IoC的使用(基于XML和注解两种方式)

本文介绍了Spring框架中IoC的使用和原理,基于XML和注解的两种IoC的使用,都在本文中有介绍。

f135917h的博客 1246
上一篇: Spring学习(二) 依赖注入
下一篇: Spring学习(四) Spring整合Junit
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值