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

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

xml的ioc案例


1.环境搭建pom.xml

<packaging>jar</packaging>

<dependencies>
    <!--spring坐标-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>

	 <!--封装了JDBC的代码,简化dao层的操作-->
	   <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.6</version>
        </dependency>
        
    <!--mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.26</version>
    </dependency>

    <!--c3p0连接池-->
    <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

2.创建sql

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);

3.创建domain.Account实体类

/**
 * 账户实体类
 */
public class Account implements Serializable {
    private Integer id;
    private String name;
    private Float money;

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Float getMoney() {
        return money;
    }

    public void setMoney(Float money) {
        this.money = money;
    }
}

4.创建IAccountService, AccountServiceImpl

  /**
     * 账户的业务层接口
     */
    public interface IAccountService {
    
        /**
         * 查询所有
         * @return
         */
        List<Account> findAllAccount();
    
    
        /**
         * 查询一个
         * @return
         */
        Account findById(Integer accountId);
    
        /**
         * 保存操作
         * @param account
         */
        void saveAccount(Account account);
    
    
        /**
         * 更新
         * @param account
         */
        void updateAccount(Account account);
    
    
        /**
         *删除
         * @param accountId
         */
        void deleteAccount(Integer accountId);
        }
    
    
    
    
 /**
 * 账户的业务层实现类
 */
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 findById(Integer accountId) {
        return accountDao.findById(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);
    }

5创建.IAccountDao accountDaoImpl

 /**
     * 账户持久层接口
     */
    public interface IAccountDao {
        /**
         * 查询所有
         * @return
         */
        List<Account> findAllAccount();
    
    
        /**
         * 查询一个
         * @return
         */
        Account findById(Integer accountId);
    
        /**
         * 保存操作
         * @param account
         */
        void saveAccount(Account account);
    
    
        /**
         * 更新
         * @param account
         */
        void updateAccount(Account account);
    
    
        /**
         *删除
         * @param accountId
         */
        void deleteAccount(Integer accountId);
    }





/**
 * 账户持久层实现类
 */
public class AccountDaoImpl implements IAccountDao {
     //封装了JDBC的代码,简化dao层的操作
    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 findById(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);
        }
    }

6.搭建spring的开发环境
在resource下创建bean.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.xsd">

    <!-- 配置service对象-->
    <bean id="accountService" class="sise.cn.service.Impl.AccountServiceImpl">
        <!--注入dao set方法注入 其他bean类型注入-->
        <property name="accountDao" ref="accountDao"></property>
    </bean>


    <!--配置dao对象-->
    <bean id="accountDao" class="sise.cn.dao.Impl.AccountDaoImpl">
        <!--注入QueryRunner set方式注入 其他bean类型注入 -->
        <property name="runner" ref="runner"></property>
    </bean>


    <!--配置QueryRunner对象 单例对象,可能这个用完其他在用会造成线程安全问题 所以要配scope="prototype",保证每次使用这个对象时都是创建一个新的-->
    <bean id="runner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype">
        <!--注入数据源 构造函数注入 其他bean类型注入-->
        <constructor-arg name="ds" ref="dataSource"></constructor-arg>
    </bean>


    <!--配置数据源c3p0-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!--注入连接数据库的必备信息 set方法注入 基本类型和String注入-->
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc://mysql://localhost:3306/eesyioc"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>


</beans>

7.test:使用junit测试 (并不关注)

/**
 * s使用junit单元测试:测试配置
 */
public class AccountServiceTest {

    @Test
    public void testFindAll() {
        //1.获取容器对象
        ClassPathXmlApplicationContext cs = new ClassPathXmlApplicationContext("bean.xml");
        //2.得到业务层对象
        IAccountService as = cs.getBean("accountService",IAccountService.class);
        //3.执行方法
        List<Account> accounts = as.findAllAccount();
        for (Account account : accounts) {
            System.out.println(account);
        }
    }

    @Test
    public void testFindOne() {
        //1.获取容器对象
        ClassPathXmlApplicationContext cs = new ClassPathXmlApplicationContext("bean.xml");
        //2.得到业务层对象
        IAccountService as = cs.getBean("accountService",IAccountService.class);
        //3.执行方法
        Account account = as.findById(1);
        System.out.println(account);
    }

    @Test
    public void testSave() {
        Account account = new Account();
        account.setMoney(12345f);
        account.setName("6ms");

        //1.获取容器对象
        ClassPathXmlApplicationContext cs = new ClassPathXmlApplicationContext("bean.xml");
        //2.得到业务层对象
        IAccountService as = cs.getBean("accountService",IAccountService.class);
        //3.执行方法
        as.saveAccount(account);
    }


    @Test
    public void testUpdate() {
        //1.获取容器对象
        ClassPathXmlApplicationContext cs = new ClassPathXmlApplicationContext("bean.xml");
        //2.得到业务层对象
        IAccountService as = cs.getBean("accountService",IAccountService.class);
        //3.执行方法
        Account account = as.findById(4);
        account.setMoney(23456f);
        as.updateAccount(account);

    }


    @Test
    public void testDelete() {
        //1.获取容器对象
        ClassPathXmlApplicationContext cs = new ClassPathXmlApplicationContext("bean.xml");
        //2.得到业务层对象
        IAccountService as = cs.getBean("accountService",IAccountService.class);
        //3.执行方法
        as.deleteAccount(4);
    }
}

要点:
1.能不能看出来QueryRunner也需要注入
2.注入QueryRunner时数据源dataSource也可以实现配置并且把连接数据库的信息注入进来
3.能不能看出来QueryRunner如果是单例对象,面临多个dao使用时会产生线程安全问题


注解ioc案例


在xml的基础上改进
1.导入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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">


    <!--注解开发必须配的-->
    <!--告知spring在创建容器时要扫描的包-->
    <context:component-scan base-package="sise.cn"></context:component-scan>
    
    <!--配置QueryRunner对象 单例对象,可能这个用完其他在用会造成线程问题 所以要配scope="prototype",保证每次使用这个对象时都是创建一个新的-->
    <bean id="runner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype">
        <!--注入数据源 构造函数注入 其他bean类型注入-->
        <constructor-arg name="ds" ref="dataSource"></constructor-arg>
    </bean>


    <!--配置数据源c3p0-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!--注入连接数据库的必备信息 set方法注入 基本类型和String注入-->
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/eesyioc"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>


</beans>

2.在AccountServiceImpl里实现把其加入spring容器中的注解

    /**
 /**
 * 账户的业务层实现类
 */
@Service("accountService")
public class AccountServiceImpl implements IAccountService {

    @Autowired//当用注解实现自动注入时set方法就不是必须的了
    private IAccountDao accountDao;

3.AccountDaoImpl

/**
 * 账户持久层实现类
 */
@Repository("accountDao")
public class AccountDaoImpl implements IAccountDao {
     //封装了JDBC的代码,简化dao层的操作
    
    @Autowired//当用注解实现自动注入时set方法就不是必须的了 
    private QueryRunner runner;
Spring IoC配置(注解+xml+DI) 0.配置思路文末有本篇文章的项目源码资源可供下载Spring通过使用@Autowired/@Value注解来完成依赖注入(DI)。引用数据类型:在将一个组件类对象注入到另一个组件类对象中时,可以在目标组件类的属性上直接使用@Autowired注解,Spring容器会自动为该属性提供合适的组件类对象实例。这样,无需手动在XML配置文件中指定依赖关系,Spring会根据@Autowired注解自动进行依赖注入。 阅读详情

相关推荐

Spring之Framework IOC容器 基于XML管理bean 基于注解管理bean

和 XML 配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框架检测 到注解标记的位置,然后针对这个位置按照注解标记的功能来执行具体操作。本质上:所有一切的操作都是Java代码来完成的,XML和注解只是告诉框架中的Java代码如何执行。组件享受到了容器化 的管理,替程序员屏蔽了组件创建过程中的大量细节,极大的降低了使用门槛,大幅度提高了开发 效率。完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主 动的将资源推送给需要的组件,开。...

小颖同学 398

Spring 基于 XML 的 IOC

用上万字给你讲清楚 Spring 基于 XML 的 IOC

Demo_Null 4836

Spring IOC 详解:基于 XML 配置与注解的依赖注入

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

2401_84910501的博客 1192

Spring_Ioc基本配置使用(基于xml)

Spring_Ioc1、IOC简介1.1、什么是IOC2、容器2.1、容器概述 1、IOC简介 1.1、什么是IOC IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”。 是Spring框架里面管理对象的一个容器。 2、容器 2.1、容器概述 ApplicationContext是Spring容器IOC实现的代表,它负责实例化、配置和组装Bean。容器通过读取配置元数据获取有关实例化、配置和组装哪些对象的说明。配置元数据可以使用xml、Java注解活Java代码来呈现,它允许

qq_41931364的博客 744

保姆级QFIL线刷教程:从驱动安装到成功刷机的完整避坑指南(Win10/11实测)

本文提供了一份详细的QFIL线刷教程,涵盖从驱动安装到成功刷机的完整流程,特别针对Win10/11系统进行了实测。文章重点解决了EDL模式下的常见问题,如Download Fail和COM Port识别错误,并提供了实用的避坑技巧和故障排除方案,帮助用户实现零失误操作。

weixin_29245767的博客 763

ESP32IDF 通过 PCA9685控制舵机的程序bug处理

esp32 PCA9685 bug 舵机

ztvzbj的博客 725

IOC与DI系列:3 基于XMl的IOC的实现过程

1.IOC的概念 通俗地说,IOC就是读取xml或者注解配置的类信息,将其存储到一个Map里,然后将这些类进行初始化,也放到Map里,程序在使用的时候直接从Map里读取就好了。读取的过程就是IOC,根据依赖关系进行完整初始化的过程就是DI。而最后的这个map就是Spring容器。 规范一点说,IOC就是把原先代码里需要实现的对象创建,依赖和管理的工作交给容器帮我们做。 那么必然我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象之间的关系。这个描述就是配置文件或者注解。 DI依赖注入就是指

纵横千里 捭阖四方 的专栏 336

Windows 10/11系统下TurboDesign 6.4.0完整安装指南(附序列号+破解补丁)

本文提供Windows 10/11系统下TurboDesign 6.4.0的完整安装指南,涵盖系统环境预检、安装程序部署、序列号处理及破解补丁部署等关键步骤。通过详细的安装教程和优化配置,帮助用户高效完成这款涡轮机械设计软件的安装与调试,解决常见兼容性问题。

s4t5u6v的博客 1029

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

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

m0_65277261的博客 1607

【软件介绍】RVC本地部署使用方法

【摘要】RVC是一款功能强大的开源语音转换工具,具有实时处理、多音效选择、高质量音频处理等特点。文章详细介绍了RVC的安装与使用方法:1)配置Python环境;2)根据电脑系统选择对应安装包解压;3)启动程序进入浏览器操作界面。重点讲解了声音克隆的关键步骤:建议使用短音频素材,选择合适训练方法(推荐pm或rmvpe),设置100次训练轮数,生成的模型文件存入weights文件夹。最后通过上传音频即可实现声音克隆。操作过程需注意保持程序运行状态,并提供了相关资源下载地址。

心动的那一刻,记忆便盛开了花 2976

英伟达笔试1

本文摘要: 使用NAND2门设计4位奇偶校验发生器,通过15个NAND2门实现4输入异或功能,分三级结构完成奇校验计算。 时序分析公式总结: 建立时间约束:T_cq + T_comb(max) + T_setup + T_skew ≤ T_clk 保持时间约束:T_cq + T_comb(min) + T_skew ≥ T_hold 提供了两段路径的具体时序检查公式和建立违规修复方法 分析32位粘滞累积寄存器Verilog代码: 功能:记录输入数据中出现过的所有1位 每个bit独立实现,复位清零,有效输入时

soulermax的博客 165

Spring-IoC 基于xml管理

基于xml的IoC实现 现大多使用注解方式,xml方式并不简洁,本文仅记录xml用作基础学习。

weixin_46356448的博客 1045

ComfyUI 的 LoRA 训练:秋叶 LoRA-scripts 参数设置与测试方法详解

秋叶 LoRA-scripts 的参数设置需结合理论(如模型原理、优化器机制)和硬件条件(显存、算力),新手可先按推荐值起步,再逐步调整。测试时,loss 值帮你判断训练是否正常,XYZ 图表法帮你找到最佳使用参数。掌握这些知识,你就能避开 LoRA 训练的常见坑,从 “盲目调参” 变为 “精准训练”。

2301_78150483的博客 2398

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

基于 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) val...

AXibaaa的博客 306

大数据合规工程师必备的7项核心技能

当我们谈论“大数据”时,往往先想到它的价值——驱动业务增长、优化用户体验、赋能智能决策。大数据的价值越大,其合规风险的“重量”就越重。2023年,全球有超过120个国家出台了数据保护法规,中国《个人信息保护法》《数据安全法》的实施进入深水区,欧盟GDPR的罚款金额屡创新高(最高达全球营收的4%)。企业面临的合规压力,早已从“被动应对监管”升级为“主动构建合规能力”。在这样的背景下,大数据合规工程师。

SuperAGI2025 1259

Python 爬虫进阶:淘宝热卖商品价格走势抓取、反爬与分析全流程

在大数据时代,数据是商业决策的重要依据。电商平台上的商品价格走势,对于商家调整经营策略、消费者选择购买时机都有着关键的参考价值。本篇文章将深入解析如何利用 Python 爬虫抓取淘宝热卖商品的价格走势数据,并应对其中的反爬机制,最后对数据进行分析,带领大家领略 Python 爬虫在电商领域的强大应用。

yansideyucsdn的博客 1056

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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

f135917h的博客 1246

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IOC基于注解和xml方式

IOC常用的注解 @Component @Controller @Service @Repository DI常用的注解 @Autowired 自动装配 @Qualifier 自动装配 @Resource 自动装配 @Inject 根据类型自动装配 @Value 基本类型和String类型赋值 @Scope bean的作用范围注解 ...

weixin_42454617的博客 131

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Spring】IOC案例从XML到注解

本例不展示业务代码。仅展示跟spring的使用相关的代码。 基于XML的IOC案例 service 实现类 public class AccountServiceImpl implements AccountService { private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } } .

编程学习集装箱 171

11. 基于半注解半xml的IoC案例

需求:在数据库中创建一个account表,使用spring+dbutils完成对account的增删改查 在这个案例中,并没有完全使用注解或者完全使用xml配置,而是使用半注解半xml配置的方式 注解方式处理:自己写的类及其之间的关系使用注解的方式创建bean、注入依赖、管理bean的作用范围、管理bean的生命周期 xml配置文件处理:注解扫描、类库或jar包中的类的bean的创建、注入依赖,管理bean的作用范围、管理bean的生命周期(比如连接数据库) 一 项目的目录结构 二 pom.x

gaohanjie123的博客 194

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

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

jocer_zhu的博客 1418

Spring之Ioc的xml和注解简单实现

文章目录Ioc的概念创建对象注入数据依赖注入:改变作用范围生命周期相关 Ioc的概念 按照百度百科上的内容是:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。 通俗的讲,就是将新建对象的控制权交给了spring,这就是控制反转。 创建对象 例如我加载一个时间类 <bean id="time" class="java.util.Date"></bean> 注入数据 通常创建对象采用的是默认无参构造

学海无涯乐作舟 292

Spring之IOC的xml配置与注解配置

spring是一个开源的Java开发框架。其核心为IOC与AOP。spring的IOC控制反转就是将对象的创建与对象之间依赖关系的维护交给spring容器进行管理,而spring如何管理对象,则通过下面两种方式。

m0_64926208的博客 1021

Spring IOC控制反转的xml和注解实现

IOC(Inversion of Control) 背景 在以往的面向对象的程序中,复杂的业务逻辑都是通过对象之间的彼此通信合作来完成的,如下图所示: 在上图中,对象A,B,C,D,E之间,存在着复杂的依赖关系,当其中一个对象出现问题时,就会导致其他的对象无法继续工作。为了解决对象之间耦合度过高,相互之间依赖太强的问题,Michael Mattson提出了IOC的概念。 IOC(控制反转)和DI(注入依赖) 什么是IOC IOC的全称是Inversion of Control,中文为“控制反转”。下面我们

weixin_45617512的博客 342

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新注解
Hello_MAOSONG
博客等级 码龄8年 8粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值