一、Spring简介
Spring是分层的JavaSE/EE应用full-stack轻量级开源框架
- 框架:经过验证的,具有一定功能的,半成品软件;
- 框架作用:
- 提高开发效率
- 增强可重用性
- 提供编写规范
- 节约维护成本
- 解耦底层实现原理
二、Spring入门
总结一下主要的几个步骤吧
- 导入依赖的坐标,比如Spring的坐标,其他比如数据库、单位测试等等(坐标来自MAVEN概念,得先看下MAVEN相关知识再看Spring)
- 编写业务层与表现层接口与实现类
- 在Spring的配置文件中配置bean(配置文件一般命名为applicationContext.xml),将实现类添加为Spring可以控制的资源(或者说Spring可以直接操作该实现类),举个栗子~
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 1.创建spring控制的资源-->
<bean id="userService" class="com.Yuansir.service.impl.UserServiceImpl"/>
</beans>
- 在相关表现层加载该配置文件,获取Spring或控制的资源,调用里面的资源(方法);
//2.加载配置文件的过程
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//3.获取资源的过程
UserService userService = (UserService) ctx.getBean("userService");
userService.save();
当然上述步骤只是一个极简单的例子,实际开发过程中用到的配置可能比这个要多得多,但是里面的内容思想步骤差不多也就是这样;
二、IoC配置
IoC:控制翻转,Spring反向控制应用程序所需要使用的外部资源;
1.bean标签
- 用来定义Spring中的资源,换句话说就是凡是在bean中定义过的,都可以被Spring视为资源,都可以被调用,这是使用Spring的前提;
- 主要的几个属性
- id:bean的名称,要确保唯一性,通常用实现类的上级接口来命名;
- class:bean的类型;一般就是指向id中的接口的实现类路径;
- name:和id作用一样,类似起别名,多用于团队开发中;实际用的不多;
- scope:用于控制bean中创建的对象是否是单例的,取值有两个,singleton和prototype,默认为singleton,bean中需要有复用的资源时,可以用一下;
- init-method,destroy-method:用于控制bean对象在初始化或销毁时完成的工作
- 当scope=“singleton”时,spring容器中有且仅有一个对象,init方法在创建容器时仅执行一次
- 当scope=“prototype”时,spring容器要创建同一类型的多个对象,init方法在每个对象创建时均执行一次
- 当scope=“singleton”时,关闭容器会导致bean实例的销毁,调用destroy方法一次
- 当scope=“prototype”时,对象的销毁由垃圾回收机制gc()控制,destroy方法将不会被执行
2.DI
依赖注入,应用程序运行依赖的资源由Spring为其提供,资源进入应用程序的方式称为注入;
IoC与DI的关系:IoC与DI是同一件事站在不同角度看待问题
3.set注入
- 先用自己的表述来总结一下过程步骤:
- 业务层与其它层(这里比如说是数据持久层Dao)交互情况下;
- 首先编写持久层接口和接口实现类;
- 其次在业务层接口实现类中定义所需注入的私有变量,该变量名可以与持久层接口名保持一致;
- 比如:private UserDao userDao
- 然后生成该变量的set方法;
- 然后再spring配置文件中(applicationContext.xml)的bean中声明资源;
<!--2.将要注入的资源声明为bean-->
<bean id ="userDao" class = "com.Yuansir.dao.impl.UserDaoImpl"/>
<!--3.将要注入的资源声明为bean-->
<bean id ="userService" class = "com.Yuansir.service.impl.userServiceImpl">
<!--name:要注入的变量名,一般就是set方法生成的变量名,只截取set后面的字符;
ref:引用类型的变量,也就是要声明注入的bean的id (第2步中的id);
value:非引用类型的变量,一般就是常量,要写明具体的值;
-->
<property name = "userDao" ref = "userDao"
</bean>
- 最后就可以在业务层去调用数据层中定义的接口实现类;
4.读取外部properties文件
- Spring提供了读取外部properties文件的机制,使用读取到的数据为bean的属性赋值
- 操作步骤
- 准备外部properties文件
- 开启context命名空间支持
xmlns:context="http://www.springframework.org/schema/context"
- 加载指定的properties文件
<context:property-placeholder location="classpath:filename.properties">
- 使用加载的数据
<property name="propertyName" value="${propertiesName}"/>
- 注意:如果需要加载所有的properties文件,可以使用
*.properties
表示加载所有的properties文件;
- 注意:name中使用的是在实现类中定义的变量名;
- 注意:读取数据使用**${propertiesName}格式进行,其中propertiesName**指properties文件中的属性名;
5.第三方资源配置
- 阿里数据源方案Druid
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/spring_ioc"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
调用第三方数据
public class UserAPP{
public static void main (String [] args)
{
ApplicationContext ctx = new ClassPathApplicationContext("applicationContext.xml")
DruidDataSource dataSource = new (DruidDataSource) ctx.getBean("dataSource");
//打印一下Druid的对象,看是否可以调用
System.out.println(dataSource);
}
}