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

后端框架(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>

http://www.xdnf.cn/news/6756.html

相关文章:

  • 【技术原理】ELK技术栈的历史沿革与技术演进
  • Linux——一键部署应用脚本
  • 方法区与元空间解析
  • 软件架构风格系列(2):面向对象架构
  • (网络文件系统)N
  • 本地部署Scratch在线编辑器
  • Ngrok 配置:实现 Uniapp 前后端项目内网穿透
  • Recycling Krylov Subspace 方法解释与开源实现
  • 【Arthas实战】常见使用场景与命令分享
  • 电子电路:电容在电子电路中到底发挥着什么作用?
  • Unity 批量将图片从默认类型改为Sprite类型
  • 数字金融发展对商业银行信用风险的影响研究(stata分析范文)
  • 描述性统计图表
  • HC32L190 ADC采集
  • firewall防火墙
  • 前端方法的总结及记录
  • 隧道结构安全在线监测系统解决方案
  • 探秘雷克赛恩生产基地:解码国产投影技术深耕之路
  • 动态规划-63.不同路径II-力扣(LeetCode)
  • 操作系统知识总结
  • 丝杆升降机最大载荷的工程力学解析与选型实践
  • 懒汉式单例模式的线程安全实现
  • ros2中自定义的package查不到?
  • 事件响应策略规范模版
  • 基于Unity的简单2D游戏开发
  • [特殊字符] 如何优雅地避免 SQL 多表 LEFT JOIN 造成的笛卡尔积放大问题?
  • springboot连接高斯数据库(GaussDB)踩坑指南
  • 杰理ac696配置mic
  • 二水平设计的单次重复
  • 【Shell的基本操作】