spring创建项目xml文件的配置以及使用spring+c3p0连接池+jsp、servlet+elementUI+Vue简单实现学生管理系统的增删改查

spring创建项目xml文件的配置以及使用spring+c3p0连接池+jsp、servlet简单实现学生管理系统的增删改查

1- spring容器的简单介绍

Spring: 中文意思为春天 给整个软件行业带来了春天

2002年 Road Jahnson首次推出了Spring框架雏形interface21框架

2004年3月24 Srping以interface21框架为基础 经过重新设计 发布了1.0正式版

Spring理念: 使现有技术更加实用 本身就是大杂烩 整合现有的框架技术 解决企业应用开发的复杂性而创建的

Spring 是一个开源框架, Spring 是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design 中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为JavaEE 应用程序开发提供集成的框架。Spring 使用基本的JavaBean 来完成以前只可能由EJB 完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java 应用都可以从Spring 中受益。Spring 的核心是控制反转(IoC)和面向切面(AOP)。简单来
说,Spring 是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。

JavaEE 开发分成三层结构:

  • WEB 层:Spring MVC.
  • 业务层:Bean 管理:(IOC)
  • 持久层:Spring 的JDBC 模板.ORM 模板用于整合其他的持久层框架.

Spring官方网站:

https://docs.spring.io

官方下载地址:https://repo.spring.io/libs-release-local/org/springframework/spring/

GitHub下载地址:https://github.com/spring-projects

下载spring中的jar网址:https://repo.spring.io/libs-release-local/org/springframework/spring/4.3.29.RELEASE/

Spring优点:

  1. Spring框架是一个开源、免费的框架、容器
  2. Spring是一个轻量级、非侵入式的
  3. JavaEE更加容易使用
  4. 面向对象的设计比如何实现技术都重要
  5. 代码更加容易测试
  6. JavaBean提供了应用程序配置的最好方法
  7. 在java中,已检查异常被过度使用。框架不应该迫使捕获不能恢复的异常
  8. 对事务的支持,对框架的支持
  9. 控制反转IOC,反向切面AOp

Spring组成:

  1. 最完善的轻量级核心框架
  2. 通用的的事务管理抽象层
  3. JDBC抽象层
  4. 集成了Toplink、JDO、and iBATIS SQL Maps
  5. AOP功能
  6. 灵活的的MVC Web框架

为什么学习Spring?

  • 方便解耦,简化开发
    Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring 管理
  • AOP 编程的支持
    Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
  • 声明式事务的支持
    只需要通过配置就可以完成对事务的管理,而无需手动编程
  • 方便程序的测试
    Spring 对Junit4 支持,可以通过注解方便的测试Spring 程序
  • 方便集成各种优秀框架
    Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、
    MyBatis、Quartz 等)的直接支持
  • 降低JavaEE API 的使用难度
    Spring 对JavaEE 开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封
    装,使这些API 应用难度大大降低

spring版本–3.x、4.x、5.x

2-简单的搭建一个spring框架项目

2.1-首先进入官网 https://spring.io/ 点击projects后点击framework

在这里插入图片描述

2.2 点击github这个头像

在这里插入图片描述

2.3 往下翻 点击图示位置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.4 接下来创建一个简单的spring项目

2.4.1 Spring 框架核心模块

在这里插入图片描述

2.4.2 创建项目成功后 导入相应的jar包

在这里插入图片描述

2.4.3 创建包
2.4.3.1 pojo包下的Student实体类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
   
    private int sid;
    private String sname;
    private String sex;
    private int age;
    private String addr;
    private int cid;
  	public void init(){
   
        System.out.println("Student实体类初始化方法被调用......");
    }
    public void destory(){
   
        System.out.println("Student实体类方法调用被销毁....");
    }
}
2.4.3.2 建立resources资源目录 定义spring的配置文件 applicationContext.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">
  
</beans>
2.4.3.3 测试
//测试spring中的bean对象常用属性
    @Test
    public void test01(){
   
        //1.1得到spring容器
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:applicationContext.xml");
        Student stu01 = context.getBean(Student.class);
        Student stu02 = context.getBean(Student.class);
        System.out.println("stu01 = " + stu01);
        //1.2)测试spring的默认作用域为单例模式
        System.out.println(stu01==stu02);
        context.close();
    }
Student实体类初始化方法被调用......
stu01 = Student(sid=0, sname=null, sex=null, age=0, addr=null, cid=0)
true
Student实体类方法调用被销毁....
2.4.4 spring创建对象的三种方式
2.4.4.1 使用构造器无参创建bean对象
<?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">

    <!--
        bean 标签的一些常用属性说明:
        ① name:代表为自定义的bean 起一个名字,可以存放特殊字符。
        ② id:代表为自定义的bean 指定一个id,不能存放特殊字符。
        ③ class:代表自定义bean 的完整类名,包括包名。
        ④ abstract:代表自定义bean 是否是抽象类,true:是抽象类,false:不是抽象类
        ⑤ init-method:代表自定义bean 的初始化方法.
        ⑥ destroy-method:代表自定义bean 的销毁方法。
        ⑦ scope:代表自定义bean 的作用范围。可取值如下:
        singleton:代表此对象为单例。【默认值】(常用)
        prototype:代表此对象为多例。(常用)
        request:代表此对象在一次请求有效。
        session:代表此对象在浏览器不关闭的情况下有效。
      -->
    <!--bean-->
    <bean id="student" class="com.zelin.pojo.Student" init-method="init" destroy-method="destory" scope="singleton"/>
</beans>

测试

//测试spring中的bean对象常用属性
    @Test
    public void test01(){
   
        //1.1得到spring容器
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:applicationContext.xml");
        Student stu01 = context.getBean(Student.class);
        Student stu02 = context.getBean(Student.class);
        System.out.println("stu01 = " + stu01);
        //1.2)测试spring的默认作用域为单例模式
        System.out.println(stu01==stu02);
        context.close();
    }

测试结果

Student实体类初始化方法被调用......
stu01 = Student(sid=0, sname=null, sex=null, age=0, addr=null, cid=0)
true
Student实体类方法调用被销毁....
2.4.4.2 使用静态工厂方法创建对象

BeanFactory

/**
 * @author wf
 * @date 2020-10-16 18:45
 * 使用静态方法创建bean对象
 */
public class BeanFactory {
   
    public static Student getStudent(){
   
        return new Student();
    }
}

配置文件

<!--bean对象:第二种方式:使用静态方法创建对象-->
    <bean id="beanFactory" class="com.zelin.factory.BeanFactory" factory-method="getStudent"/>

测试

//2.使用静态方法获取bean对象
    @Test
    public void test02(){
   
        //2.1得到spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:spring/applicationContext.xml");
        Student stu02 = (Student) context.getBean("beanFactory");
        System.out.println("stu02 = " + stu02);
    }

测试结果

//2.使用静态方法获取bean对象
    @Test
    public void test02(){
   
        //2.1得到spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:spring/applicationContext.xml");
        Student stu02 = (Student) context.getBean("beanFactory");
        System.out.println("stu02 = " + stu02);
    }
2.4.4.3 使用对象工厂方式创建bean对象

BeanStudent.java

/**
 * 第三种方式:使用对象工厂方式构造bean对象
 */
public class BeanStudent {
   
    public Student getStudent(){
   
        return new Student();
    }

}

配置文件

<!--第三种方式:使用对象工厂方式构造对象-->
    <bean id="factoryStu" class="com.zelin.factory.BeanStudent"/>
    <bean id="studentBean" factory-bean="factoryStu" factory-method="getStudent"/>

测试

//3.使用对象工厂方法获取bean对象
    @Test
    public void test03(){
   
        //3.1得到spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:spring/applicationContext.xml");
        Student stu03 = (Student) context.getBean("studentBean");
        System.out.println("stu03 = " + stu03);
    }

测试结果

Student实体类初始化方法被调用......
stu03 = Student(sid=0, sname=null, sex=null, age=0, addr=null, cid=0)
2.4.5 IOC-控制反转(Inverse Of Control)

以前程序中的javabean 对象是由我们程序员创建完成,现在由spring 容器帮我们创建完成,并且以前javabean 的依赖关系也是我们程序员自己定义,现在也由spring 容器帮我们创建这种依赖关系,所以,这种控制权以前由我们完成现在改由spring 容器完成,这样,控制权发生了反转。

2.4.6 DI-依赖注入(Dependency-Injection)

就是我们可以在spring 的配置文件中定义javabean 时,可以为其指定依赖关系,这样,我们在程序中的这种依赖就不需要我们程序员去干预。

2.4.7属性的赋值(简单属性赋值)
2.4.7.1 方法一:setter方法实现属性的赋值【最常用的方法】

配置文件

<bean id="student" class="com.zelin.pojo.Student" init-method="init" destroy-method="destory" scope="singleton">
        <!--实现属性赋值方法一:setter方法实现-->
        <property name="sid" value="1001"/>
        <property name="sname" value="刘亦菲"/>
        <property name="sex" value=""/>
        <property name="age" value="18"/>
        <property name="addr" value="上海"/>
        <property name="cid" value="2005"/>
    </bean>

测试代码

//4.setter方法实现属性赋值
    @Test
    public void test04(){
   
        //4.1得到spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:spring/applicationContext.xml");
        Student stud = (Student) context.getBean("student");
        System.out.println("stud = " + stud);
    }

实现结果

stud = Student(sid=1001, sname=刘亦菲, sex=, age=18, addr=上海, cid=2005)
2.4.7.2 方法二:构造方法实现属性的赋值【较使用】

配置文件

<!--第二种实现属性注入方式:构造方法为属性进行赋值-->
    <bean id="stud01" class="com.zelin.pojo.Student">
        <!--使用index下标 不常用 因为Index容易出错-->
        <!--<constructor-arg index="0" value="1001"/>-->
        <!--<constructor-arg index="1" value="刘亦菲"/>-->
        <!--<constructor-arg index="2" value="女"/>-->
        <!--<constructor-arg index="3" value="18"/>-->
        <!--<constructor-arg index="4" value="上海"/>-->
        <!--<constructor-arg index="5" value="1987"/>-->
        <!--使用name属性-->
        <constructor-arg name="sid" value="1001"/>
        <constructor-arg name="sname" value="刘亦菲"/>
        <constructor-arg name="addr" value="上海"/>
        <constructor-arg name="sex" value="1001"/>
        <constructor-arg name="age" value="18"/>
        <constructor-arg name="cid" value="1987"/>
    </bean>

测试代码

//5.方法二:构造器方法实现属性赋值
    @Test
    public void test05(){
   
        //5.1得到spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:spring/applicationContext.xml");
        Student stud02 = (Student) context.getBean("stud01");
        System.out.println("stud02 = " + stud02);
    }

实现结果

stud02 = Student(sid=1001, sname=刘亦菲, sex=1001, age=18, addr=上海, cid=1987)
2.4.7.3 方法三:p标签或c标签实现属性的赋值【不常使用】

下面以p标签方式实现属性的赋值

配置文件:需要导入p标签的配置

xmlns:p="http://www.springframework.org/schema/p
<!--第三种方式实现属性的赋值:p标签或者c标签-->
    <bean id="stud02" class="com.zelin.pojo.Student"
          p:sid="1003" p:sname="刘亦菲" p:sex=""
          p:addr="上海" p:age="25" p:cid="1009"/>

测试代码

 //6.方法三:p标签或c标签实现属性赋值
    @Test
    public void test06(){
   
        //6.1得到spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext(
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值