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
<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:执行查询相关语句;
版权归原作者 沧哑 所有, 如有侵权,请联系我们删除。