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

后端框架(3):Spring(1)

Spring是什么?

    spring是一个轻量级的,IOC和AOP的一站式Java 开发框架。

    目的是为了简化企业级应用开发而生的。

    轻量级:框架体积小(核心模块)

  IOC:Inversion of Control 控制反转 把创建对象的控制权,反转给spring框架

            以前我们在程序中需要对象,都是自己new,例如:new StudentDao对象

  AOP:Aspect Oriented Programming 面向切面编程

            将程序中的一些公共的非业务代码分离提取出来,然后在业务代码执行时,给他们横切进来。

            使用的动态代理的机制实现,在我们的业务代码,不显示的调用,但是执行业务代码,会通过代理对象,调用非业务代码。

一站式:除了核心的IOC和AOP功能之外,还对数据访问层,web层都有封装,所以是一站式的

Spring 体系结构    

Spring Hello World 搭建

    1、Maven导入spring核心基础jar

<!-- spring-context--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version></dependency>

2、编写spring配置文件

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="admin" class="com.ffyc.springpro.model.Admin"> </bean>
</beans>

3、编写一个测试类(Admin)

public class Admin {private String account;private String password;public Admin() {System.out.println("Admin 无参构造");}public Admin(String account, String password) {this.account = account;this.password = password;}public String getAccount() {return account;}public void setAccount(String account) {System.out.println("setAccount");this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {System.out.println("getPassword");this.password = password;}@Overridepublic String toString() {return "Admin{" +"account='" + account + '\'' +", password='" + password + '\'' +'}';}
}

4、测试spring

        /*ClassPathXmlApplicationContext 是spring框架中的一个具体的实现类,负责生成,管理程序中的对象可以看作是一个容器,所以一般把spring框架也称为spring容器,或者IOC容器new ClassPathXmlApplicationContext("spring.xml");getBean("admin"); 从spring框架(容器)中获取到需要的对象*/ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");Admin admin = (Admin) applicationContext.getBean("admin");Admin admin1 = applicationContext.getBean("admin", Admin.class);System.out.println(admin);System.out.println(admin1);

                            

IOC(控制反转)

        控制反转 这是一种编程思想

           把生成对象的控制权,反转给spring框架管理,spring框架负责管理对象的整个生命周期过程。 对外提供获取对象的方法。我们在程序中哪里需要使用,在哪里获取即可

spring bean管理

    bean对象,由于把对象交给spring管理后,spring会对对象进行功能的增强,所以在spring框架中生成的对象,统一称为bean对象

    区分这个对象是我们自己new的还是spring框架生成的

spring中bean管理有两种方式:

1、基于xml配置方式
<bean id="admin" class="com.ffyc.springpro.model.Admin" scope="prototype">
<constructor-arg name="account" value="admin"></constructor-arg>
<constructor-arg name="password" value="111"></constructor-arg>
</bean><bean id="adminDao" class="com.ffyc.springpro.dao.AdminDao"></bean><bean id="adminService" class="com.ffyc.springpro.service.AdminService">
<property name="adminDao" ref="adminDao"></property>
</bean>

        bean 配置需要spring管理的类

        id 生成的对象名

        class 全类名

        name 对象别名,可以为多个

        scope: singleton(默认值):在 Spring 中只存在一个bean实例, 单例模式. prototype:原型 getBean()的时候都会new Bean()

2、基于注解方式
<!--开启spring注解扫描功能  指定扫描的包--><context:component-scan base-package="com.ffyc.springpro"> </context:component-scan>

        注解创建对象

@Component(value = "admin")
@Scope(value = "prototype")
//等同于xml中<bean id="admin" class="com.ffyc.springpro.model.Admin" scope="prototype"> 
@Repository(value = "adminDao")//基于dao层
@Service(value = "adminService")//基于service层

 spring注解方式bean管理

         自动注入

         @Autowired 是spring框架提供的注解

                用于在属性和属性的set方法上,如果用在属性上,set方法都不需要再写了

                默认情况下,要注入的值不能为空,required=true

        自动注入(@Autowired)有两种值的匹配方式:

                 1.通过属性的类型查找 (默认)

                 2.通过对象的名字查找  与@Qualifier(value = "adminDao")一起使用

        @Resource 是java语言中提供的注解标签

                也是添加在属性上,不需要写set方法,注入的值也是不能为空的,也可以通过类型查找要注入的对象,也可以通过对象名字查找要注入的对象 @Resource(name = "adminDao")

注解与 XML 的对比

        注解优点: 方便、直观、高效(代码少,没有配置文件的书写那么复杂)。

        注解缺点:以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。

        xml 优点是: 配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重启服务器即可将新的配置加载。

        xml 的缺点是:编写麻烦,效率低,大型项目过于复杂。

Spring 数据访问层管理

        步骤:

        1、在pom.xml中导入Spring-jdbc数据访问层jar包

<!-- spring-jdbc--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.2.RELEASE</version></dependency><!--阿里数据源 数据库连接管理组件--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency>

        2、在spring.xml中管理数据源对象

              spring管理数据库链接对象

              本次采用阿里巴巴数据库连接管理对象

    <!--阿里巴巴数据库连接管理对象,负责生成数据库连接对象,以及提供数据库连接池功能让spring管理阿里巴巴数据库连接对象--><bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name = "driverClassName" value = ""></property><property name = "url" value=""></property><property name= "username" value=""></property><property name="password" value=""></property><property name="initialSize" value="10"></property><!--初始化连接数量--><property name="maxActive" value="20"></property><!--最大连接数量--></bean>

Spring集成Mybatis

                Spring集成Mybatis其核心是将SqlSessionFactory交由Spring管理,并由Spring管理对dao接口的代理实现。

        1、在pom.xml中导入mybatis jar包

<!--spring集成mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency>

        2、在spring.xml中配置sqlSessionFactory

 <!--spring管理生成SqlsessionFactory对象--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="druidDataSource"></property><!--注入数据源--><property name="configLocation" value="classpath:mybatis.xml"></property><!--配置mybatis配置文件--><property name="mapperLocations" value="classpath:mappers/*Mapper.xml"><!--扫描mappers映射文件--></property></bean>

        3、在spring.xml中指定生成接口代理

<!--生成dao包下所有接口的代理对象--><bean id="mapperFactory" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.ffyc.ssm.dao"></property><!--指定接口所在的包--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean>

相关文章:

  • IntelliJ IDEA打开项目后,目录和文件都不显示,只显示pom.xml,怎样可以再显示出来?
  • 西门子 S1500 PLC 通过 Profinet 对 6 台施耐德 ATV304 变频器的控制,用于 6 台升降台的位置控制。
  • Lua中使用module时踩过的坑
  • K8S从Harbor拉取镜像
  • Go语言处理HTTP下载中EOFFailed
  • Flutter目录结构介绍、入口、Widget、Center组件、Text组件、MaterialApp组件、Scaffold组件
  • 力扣654题:最大二叉树(递归)
  • React底层架构深度解析:从虚拟DOM到Fiber的演进之路
  • spring cloud gateway 源码解析
  • 火山引擎AI大模型
  • 经典启发算法【早期/启发式/HC爬山/SA模拟退火/TS禁忌搜/IA免疫 思想流程举例全】
  • Socket echo server
  • 成功案例丨从草图到鞍座:用先进的发泡成型仿真技术变革鞍座制造
  • Tomcat 配置 HTTPS 访问全攻略(CentOS 环境)
  • 【愚公系列】《Manus极简入门》042-投资策略分析师:“投资智慧导航”
  • 从硬件角度理解“Linux下一切皆文件“,详解用户级缓冲区
  • CCIE与HCIE哪个考试难度更大?
  • Java EE初阶——wait 和 notify
  • AI与产品架构设计系列(2):Agent系统的应用架构与落地实
  • 【沉浸式求职学习day41】【Servlet】
  • 中方是否计划解除或调整稀土出口管制?外交部回应
  • 马上评|文玩字画竞拍轻松赚差价?严防这类新型传销
  • 中国军网:带你揭开3所新调整组建军队院校的神秘面纱
  • 人民日报整版聚焦:外贸产品拓内销提速增量,多地加快推动内外贸一体化
  • 吉利汽车一季度净利润大增264%,称整合极氪后实现整体效益超5%
  • 秦洪看盘|缩量回踩,积蓄叩关能量