Spring基础

Spring 是什么?

Spring 是于 2003 年兴起的一个轻量级的,IOC 和 AOP 的 Java 开发框架,它是为了简化企业级应用开发而生的。

Spring 优点

优点
轻量级的jar 都比较小,占用的资源少
非侵入式业务类不需要继承 spring 特定的类,通过配置完成依赖注入后就可以使用
IOC就是由 Spring IoC 容器管理对象,而非传统实现中由程序代码直接操控.
AOP面向切面编程,通过声明式方式灵活地进行事务的管理,提高开发效率和质量.
一站式框架Spring 本身也提供了数据访问功能和 web 功能,以及可以很好的管理其他框架.

Spring 体系结构

Core Container(核心容器): Beans: 管理 Beans Core: Spring 核心 Context: 配置文件 ExpressionLanguage: SpEL 表达式 AOP(切面编程) AOP 框架: Aspects Data Access(数据库整合): JDBC, ORM, OXM, JMS, Transaction Web(MVC Web 开发): Web, Servlet, Portlet, Struts Test(Junit 整合)

Spring Hello World 搭建

Maven 导入 spring 核心基础 jar

<!-- spring-context -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>5.2.2.RELEASE</version>

</dependency>

编写 spring 配置文件

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="Index of /schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="Index of /schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="user" class="com.ff.spring.bean.User"> </bean>

</beans>

编写一个 User 实体类

public class User {
    private String name ;
    private int age;
    public void work(){
        System.out.println(this.name+"工作");
    }
}

测试 spring

ApplicationContext applicationContext=null;
applicationContext = ClassPathXmlApplicationContext("application.xml");
User user1 = (User) applicationContext.getBean("user");
User user2 = (User) applicationContext.getBean("user");
System.out.println(user1);
System.out.println(user2);

IOC(控制反转)

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

IOC 容器是具有依赖注入功能的容器,负责对象的实例化、对象的初始化,对象和对象之间依赖关系配置、对象的销毁、对外提供对象的查找等操作,对象的整个生命周期都是由容器来控制。我们需要使用的对象都由 ioc 容器进行管理,不需要我们再去手动通过 new 的方式去创建对象,由 ioc 容器直接帮我们组装好,当我们需要使用的时候直接从 ioc 容器中直接获取就可以了。

正控:若要使用某个对象,需要 自己去负责对象的创建

反控:若要使用某个对象,只需要 从 Spring 容器中获取需要使用的对象不关心对象的创建过程, 也就是把创建对象的控制权反转给了 Spring 框架.

 

目的:降低耦合度

底层实现方式: 解析 xml/扫描注解标签 + 工厂模式 + 反射机制

Spring Bean 管理

基于 xml 配置方式

bean 配置需要 spring 管理的类id 生成的对象名

class 全类名

name 对象别名,可以为多个

scope(配置spring管理对象): singleton(默认值),只会创建一个对象,在spring框架启动时就会创建对象

prototype:原型的(多例)每次获取时就会创建一个新的对象

request:每次http请求创建一个

session:每次会话创建一个

singleton(默认值):在 Spring 中只存在一个 bean 实例, 单例模式.

prototype:原型 getBean()的时候都会 new Bean()

request:每次 http 请求都会创建一个 bean, 仅用于 WebApplicationContext环境

session:同一个 http session 共享一个 Bean, 不同 Session 使用不同的 Bean,使用环境同上

Xml 配置方式依赖注入【DI:Dependency Injection】

指 Spring 创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配置设置给该对象。

实现 IOC 需要 DI 做支持

注入的方式:

(1)set 方法注入

(2)构造方法注入

注解方式实现

注解开发准备工作注解需要的 jar 包注解功能封装在 AOP 包中,导入 Spring aop jar 包即可.

开启注解扫描:

<context:component-scan base-package="包名"> </context:component-scan>

• 注解创建对象

@Component(value=“user”)等于 <bean id="user" class=""></bean>

@Service :数据处理层

@Repository :数据库交互层

以上注解都可以实现创建对象功能,只是为了后续扩展功能,在不同的层使用不同的注解标记

@Scope(value=“prototype”) 原型的(多例)每次获取时就会创建一个新的对象

@Scope(value=“ singleton ”) 单例 singleton(默认值),只会创建一个对象,在spring框架启动时就会创建对象

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

@Autowired

@Autowired 是 Spring 提供的注解,可以写在字段和 setter 方法上。如果写在字段上,那么就不需要再写 setter 方法。默认情况下它要求依赖对象必须存在,如果允许 null 值,可以设置它的 required 属性为 false。

byType 自动注入 :该注解默认使用按类型自动装配 Bean 的方式。

byName 自动注入:如果我们想使用按照名称(byName)来装配,可以结合@Qualifier 注解一起使用。需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用于指定要匹配的 Bean 的 id 值。

JDK 注解@Resource 自动注入 :Spring 提供了对 jdk 中@Resource 注解的支持。@Resource 注解既可以按名称匹配 Bean,也可以按类型匹配 Bean。默认按照 ByName 自动注入

byName 注入引用类型属性 :@Resource 注解指定其 name 属性,则 name 的值即为按照名称进行匹配的 Bean 的 id。

注解与 XML 的对比

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

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

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

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

Spring JDBC

Spring 是个一站式框架:Spring 自身也提供了控制层的 SpringMVC 和 持久 层的 Spring JdbcTemplate。

开发步骤

(1)下载 Spring JdbcTemplate 的 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)导入属性文件 (该文件为自定义文件,保存的是数据库链接时一些基本值,使用${url}调用)

<context:property-placeholder location="config.properties"/> 

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

<bean id="dataSource"class="com.alibaba.druid.pool.DruidDataSource"> 
​
    <propertyname="driverClassName" value="${driverClassName}"></property> 
​
    <property name="url" value="${url}"></property>
    <property name="username" value="${uname}"></property> 
​
    <property name="password" value="${pwd}"></property> 
​
    <property name="initialSize" value="10"></property> 
​
    <property name="minIdle" value="5"></property> 
​
    <property name="maxActive" value="20"></property> 
​
</bean> 

(4)在配置文件中创建 JdbcTemplate

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
​
    <property name="dataSource" ref="dataSource"></property> 
​
</bean> 

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

JdbcTemplate 中常用的方法

execute:无返回值,可执行 ddl,增删改语句

update:执行新增、修改、删除语句;

queryForXXX:执行查询相关语句;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值