Spring基础
时间:2019-10-24
本文章向大家介绍Spring基础,主要包括Spring基础使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Spring是什么?
Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
◆目的:解决企业应用开发的复杂性
◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
◆范围:任何Java应用
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
为什么学习Spring?
1)方便解耦,简化开发
Spring就是一个容器,可以将所有对象创建和关系维护交给Spring管理
什么是耦合度?对象之间的关系,通常说当一个模块(对象)更改时也需要更改其他模块(对象),这就是耦合,耦合度过高会使代码的维护成本增加。要尽量解耦
2)AOP编程的支持
Spring提供面向切面编程,方便实现程序进行权限拦截,运行监控等功能。
3)声明式事务的支持
通过配置完成事务的管理,无需手动编程
4)方便测试,降低JavaEE API的使用
Spring对Junit4支持,可以使用注解测试
5)方便集成各种优秀框架
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式如下图:
spring之IOC?
IoC容器,最主要的就是完成对象的创建以及维护对象的依赖关系等。
所谓控制反转,包括两部分:
一是控制,二是反转,就是把传统方式需要由代码来实现对象的创建、维护对象的依赖关系,反转给容器来帮忙管理和实现。
所以我们必须要创建一个容器,同时需要一种描述来让容器创建对象与对象的关系。
Spring 依赖注入(DI)
Spring如何使用依赖注入(DO)来管理对象的依赖关系。
- Spring依赖注入 (DI) - Spring如何通过应用
Setter
注入和构造器注入的依赖注入(DI)设计模式实例 - Spring通过setter方法注入 - 通过setter方法依赖注入Bean
- Spring通过构造方法注入 - 可以通过构造方法依赖注入Bean
- Spring构造方法注入类型歧义 - 构造函数注入参数类型歧义的问题总是发生在一个bean包含多个构造方法有多个参数。
Spring小案例:
步骤一:
导入依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.1.5.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.5.RELEASE</version> </dependency> </dependencies>
步骤二:
创建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>
步骤三:
创建实体类
package com.SpringMckz.entity;
public class Student {
//普通属性
private Integer stuid;
private String stuname;
//域属性
private Teacher teacher;
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public Integer getStuid() {
return stuid;
}
public void setStuid(Integer stuid) {
this.stuid = stuid;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
//普通方法
public void stu(){
System.out.println("stuid:"+stuid+"\tstuname:"+stuname);
}
}
package com.SpringMckz.entity; public class Teacher { //普通属性 private Integer tid; private String tname; public Integer getTid() { return tid; } public void setTid(Integer tid) { this.tid = tid; } public String getTname() { return tname; } public void setTname(String tname) { this.tname = tname; } }
步骤三:
在大配置文件中增加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 id相当于当前bean唯一标识 class是bean 的全路径 property注入bean中的属性 必须封装 -->
<bean id="studentBean" class="cn.spring.entity.StudentBean">
<property name="stu_id" value="PG-12138"></property>
<property name="stu_name" value="王某"></property>
<property name="teacherBean" ref="teacherBean"></property>
</bean>
<bean id="teacherBean" class="cn.spring.entity.TeacherBean">
<property name="t_id" value="PG-9527"></property>
<property name="t_name" value="刘某"></property>
</bean>
</beans>
步骤四:
测试:
public class stutest { @Test public void teststu(){ ApplicationContext atc=new ClassPathXmlApplicationContext("applicationContext.xml"); Student student = (Student)atc.getBean("Student"); student.stu(); System.out.println(student.getTeacher().getTname()); } }
原文地址:https://www.cnblogs.com/F017/p/11732705.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 基于深度学习的文本分类应用!
- 表驱动法
- mysql将表结构导出excel
- 为什么会是Docker?
- 浅析http报文
- MySQL explain 中的 rows 究竟是如何计算的?
- SwiftUI: 使用 Touch ID 和 Face I
- Linux 系统中查找正在运行的进程的完整命令、当前工作目录等信息的方法
- Go by Example 中文:通道方向
- mycat数据库集群系列之mysql主从同步设置
- Tun/Tap接口使用指导
- Swift中? 、! 和 ??
- 故障分析 | 记一次 MySQL 主从双写导致的数据丢失问题
- 集成 SpringBoot 2.3.2 + Shiro 1.5.3 + jwt (无状态)
- 技术译文 | MySQL 8.x DDL 和查询重写插件