您现在的位置是:首页 >技术教程 >Spring网站首页技术教程

Spring

小斯要觉觉 2024-06-29 18:01:03
简介Spring

spring是于2003年兴起的一款轻量级的,非侵入式的IOC和AOP的一站式的java开发框架为简化企业级应用开发而生.
   
  轻量级的: 指定是spring核心功能的jar包不大
  非侵入式的: 我们的业务代码不需要继承或实现spring中任何的类或接口
  IOC: 控制反转  以前项目都是在哪儿用到对象,在哪儿new, 把生成对象的权利反转给spring框架
  AOP: 面向切面编程
  一站式框架: 
      提供核心功能,主要是IOC,创建管理对象.
      提供面向切面编程,增强程序扩展
      对数据访问层进行了封装(重点在于事务管理)
      对web层进行封装,使得请求更加便捷

Spring Helloword搭建

 

 

 

 Maven 导入 spring 核心基础 jar

 <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.20.RELEASE</version>
</dependency>

编写 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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd" >
</ beans >

 

 

 编写一个 Admin实体类

 需要进行配置

<bean id="admin" class="com.ffyc.ssm.model.Admin"></bean>

配置好了,测试 spring

package com.ffyc.ssm.test;

import com.ffyc.ssm.model.Admin;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test1 {
    public static void main(String[] args){

      /*      以前在哪用,在哪new 比如new Admin()

              spring的思想是由框架统一对项目中的类进行管理,在需要的地方注入即可
              相当于Map(admin,new Admin())

      */
        //读取配置文件,并将配置文件中的对象进行创建
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("spring.xml");
        //Object admin = app.getBean("admin");
        Admin admin = app.getBean("admin",Admin.class);
        System.out.println(admin);
    }
}

 IOC(控制反转)

   读作“反转控制”(Inverse of Control)更好理解,不是什么技术,而是一种 设计思想,就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理

正控: 若要使用某个对象,需要 自己去负责对象的创建
反控: 若要使用某个对象,只需要 从 Spring 容器中获取需要使用的对象,
不关心对象的创建过程 ,也就是把 创建对象的控制权反转给了 Spring 框架.
Spring管理bean有两种方式:
(1)在xml中配置
依赖注入
id="对象名"
class="地址(全类名)"
name="也可以定义对象名"
scope="指导Spring框架如何生成对象"
   singleton(默认值):在 Spring 中只存在一个 bean 实例, 单例模式,对象在Spring容器启动时创建
   prototype:原型 getBean()的时候都会 new Bean(),每次获取时创建一个新的对象
   request:每次 http 请求都会创建一个 bean, 仅用于 WebApplicationContext环境
   session:同一个 http session 共享一个 Bean, 不同 Session 使用不同的 Bean, 使用环境同上
<bean id="admin" class="com.ffyc.ssm.model.Admin" scope="singleton"></bean>
小案例:依赖注入
package com.ffyc.ssm.dao;

public class AdminDao {
    public void save(){
        System.out.println("保存记录");
    }
}
package com.ffyc.ssm.service;

import com.ffyc.ssm.dao.AdminDao;

public class AdminService {
    AdminDao adminDao;//是AdminService中的属性

  public void save(String name){
      adminDao.save();

  }

    public AdminDao getAdminDao() {
        return adminDao;
    }

    public void setAdminDao(AdminDao adminDao) {
        this.adminDao = adminDao;
    }
}
package com.ffyc.ssm.test;

import com.ffyc.ssm.model.Admin;
import com.ffyc.ssm.service.AdminService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test2 {
    public static void main(String[] args) {

        //读取配置文件,并将配置文件中的对象进行创建
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("spring.xml");

        AdminService adminService = app.getBean("adminService",AdminService.class);
        adminService.save("aaa");
    }
}

在spring中配

<!--
      Spring创建AdminDao对象
 -->
    <bean id="adminDao" class="com.ffyc.ssm.dao.AdminDao"></bean>
<!--
      Spring 创建AdminService对象,为其AdminDao注入值
-->
    <bean id="adminService" class="com.ffyc.ssm.service.AdminService">
         <property name="adminDao" ref="adminDao"></property>
    </bean>

(2)使用注解的方式(最终使用的方式)

(1)开启注解扫描

 //先加这个
xmlns:context="http://www.springframework.org/schema/context"



<context:component-scan base-package="com.ffyc.ssm"> </context:component-scan>
(2)注解创建对象
@Component(value=“admin”)等于
<bean id=“admin” class=“ 全类名”></bean>

 

注解方式注入属性【DI:Dependency Injection】

@Autowired
@Autowired 是 Spring 提供的注解,可以写在字段和 setter 方法上。如果写在
字段上,那么就不需要再写 setter 方法。默认情况下它要求依赖对象必须存在,
如果允许 null 值,可以设置它的 required 属性为 false。
byType 自动注入
该注解默认使用按类型自动装配 Bean 的方式。
byName 自动注入
如果我们想使用按照名称(byName)来装配,可以结合@Qualifier 注解一起
使用。
需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的
value 属性用于指定要匹配的 Bean 的 id 值。
JDK 注解@Resource 自动注入
S pring 提供了对 jdk 中@Resource 注解的支持。@Resource 注解既可以按名
称匹配 Bean,也可以按类型匹配 Bean。默认按照 ByName 自动注入
byName 注入引用类型属性
@Resource 注解指定其 name 属性,则 name 的值即为按照名称进行匹配
的 Bean 的 id。

注解与 XML 的对比

注解优点: 方便,直观,高效(代码少,没有配置文件的书写那么复杂)。
注解缺点: 以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。
xml 优点是: 配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重
启服务器即可将新的配置加载。
xml 的缺点是: 编写麻烦,效率低,大型项目过于复杂

Spring JDBC

(1)下载 Spring Jdbc 的 jar 包

<!-- spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>
<!-- 阿里数据源 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>

(2)导入属性文件

 

 (3)管理数据源对象

spring 管理与数据库链接 (数据源)

 

 在类中获得 JdbcTemplate 对象,就可以直接使用。

 JdbcTemplate 中常用的方法
execute:无返回值,可执行 ddl,增删改语句
update:执行新增、修改、删除语句;
@Repository(value = "adminDao")
public class AdminDao {

    @Autowired
    JdbcTemplate jdbcTemplate;
    public void saveAdmin(Admin admin){
        //spring提供jdbc
        jdbcTemplate.update("insert into admin(account,password)values(?,?)","aaa","111");
    }
}

queryForXXX:执行查询相关语句;

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。