Spring入门
Spring简介
- Spring 是一个开源框架.
- Spring 为简化企业级应用开发而生. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能.
- Spring 是一个 IOC(DI) 和 AOP 容器框架
Spring特性
- 轻量级:Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API
- 依赖注入(DI — dependency injection、IOC)
- 面向切面编程(AOP — aspect oriented programming)
- 容器: Spring 是一个容器, 因为它包含并且管理应用对象的生命周期
- 框架: Spring 实现了使用简单的组件配置组合成一个复杂的应用. 在 Spring 中可以使用 XML 和 Java 注解组合这些对象
- 一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库 (实际上 Spring 自身也提供了展现层的 SpringMVC 和 持久层的 Spring JDBC)
搭建spring开发环境
需要导入以下jar 包
commons-logging.jar
spring-beans-4.2.1.RELEASE.jar
spring-context-4.2.1.RELEASE.jar
spring-core-4.2.1.RELEASE.jar
spring-expression-4.2.1.RELEASE.jar
加这么多就足够了,如果还需要其它功能,请加入其它的jar包
内容提要
IOC & DI 概述
- IOC(Inversion of Control):其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式
- DI(Dependency Injection) — IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入. 相对于 IOC 而言,这种表述更直接
配置bean
- 配置形式:基于 XML 文件的方式;基于注解的方式
- Bean 的配置方式:通过全类名(反射)、通过工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean
- IOC 容器 BeanFactory & ApplicationContext 概述
- 依赖注入的方式:属性注入;构造器注入
- 注入属性值细节
- 自动转配
- bean 之间的关系:继承;依赖
- bean 的作用域:singleton;prototype;WEB 环境作用域
- 使用外部属性文件
- spEL
- IOC 容器中 Bean 的生命周期
- Spring 4.x 新特性:泛型依赖注入
在xml中配置bean
<!-- 通过全类名的方式配置bean -->
<bean id="dao" class="com.dream.hello.Dao"> </bean>
id:bean的名称,在 IOC 容器中必须是唯一的,若 id 没有指定,Spring 自动将权限定性类名作为 Bean 的名字
依赖注入
属性注入
属性注入即通过 setter 方法注入Bean 的属性值或依赖的对象
属性注入使用
元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 子节点指定属性值 属性注入是实际应用中最常用的注入方式
构造方法注入
- 通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。
- 构造器注入在
元素里声明属性, 中没有 name 属性
按索引匹配入参:
配置文件:
<bean id="dao" class="com.dream.hello.Dao">
<constructor-arg value="zhangsan" index="0"></constructor-arg>
<constructor-arg value="12" index="1"></constructor-arg>
</bean>
实体类:要有相对应的构造器和set get方法
public Dao(String name, int age) {
this.name = name;
this.age = age;
}
按类型匹配入参
配置文件:
<bean id="dao" class="com.dream.hello.Dao">
<constructor-arg value="zhangsan" type="java.lang.String"></constructor-arg>
<constructor-arg value="12" type="java.lang.Integer"></constructor-arg>
</bean>
实体类:把int改成Integer,
public Dao(String name, Integer age) {
this.name = name;
this.age = age;
}
Spring对JDBC的支持
- 为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架.
- 作为 Spring JDBC 框架的核心, JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法. 每个模板方法都能控制整个过程, 并允许覆盖过程中的特定任务. 通过这种方式, 可以在尽可能保留灵活性的情况下, 将数据库存取的工作量降到最低.
Spring提供了3个模板类
- JdbcTemplate:Spring里最基本的JDBC模板,利用JDBC和简单的索引参数查询提供对数据库的简单访问。
- NamedParameterJdbcTemplate:能够在执行查询时把值绑定到SQL里的命名参数,而不是使用索引参数。
- SimpleJdbcTemplate:利用Java 5的特性,比如自动装箱、通用(generic)和可变参数列表来简化JDBC模板的使用。
JdbcTemplate主要提供以下4类方法
- execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
- update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
- query方法及queryForXXX方法:用于执行查询相关语句;
- call方法:用于执行存储过程、函数相关语句。
JdbcTemplate 的使用
实现代码:
db.properties
url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
driver=oracle.jdbc.driver.OracleDriver
user=test
password=ztt123456
application.xml
<!-- 导入资源文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置 C3P0 数据源 -->
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
<property name="jdbcUrl" value="${url}"></property>
<property name="driverClass" value="${driver}"></property>
</bean>
<!-- 配置 Spirng 的 JdbcTemplate -->
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
Test.java
测试代码
public class Main extends JdbcDaoSupport{
@Test
public void Test1() {
ApplicationContext context=new ClassPathXmlApplicationContext("application.xml");
Dao bean = (Dao) context.getBean("dao");
bean.method();
}
@Test
public void test1(){
ApplicationContext context=new ClassPathXmlApplicationContext("application.xml");
JdbcTemplate bean = (JdbcTemplate) context.getBean("jdbcTemplate");
System.out.println(bean.toString());
}
@Test
public void test2(){
JdbcTemplate jdbcTemplate2 = getJdbcTemplate();
System.out.println(jdbcTemplate2.toString());
}
}
请自行添加所需jar包和相关配置文件