1. 初探spring
-
什么是spring
Spirng 是分层的Java se/ee应用full-stack(web层mvc dao层jdbc模板 业务事务管理)轻量级开源框架,以IoC(inverse of control :反转和控制) 和
AOP(Aspect Oriented Programming: 面向切面编程)为内核。还能整合开源世界 著名的第三方框架和类库
-
spring发展历程
1997年 EJB思想 。。。 2006年 ejb3.02017 5.0版本发布
-
spring的优势
3.1 方便解耦,简化开发(ioc创建dao层对象了)
3.2 aop面向切面编程
3.3 声明式事务的支持(配置一片方法控制事务控制)
3.4 方便程序测试
3.5 方便集成各种优秀的框架
3.6 降低JavaEE api的使用难度
3.7 Java源码时经典的学习范例 -
spring的体系结构
4.1 底层 核心控制器
beans 创建对象用的
core 核心
context spring的上下文
spEl spring el表达式
4.2 上一层
aop,aspects,instrumentation,messaging
-
spring快速入门
5.1 spring程序开发步骤
5.1.1 导入spring开发的基本坐标包
5.1.2 编写Dao接口和实现类
5.1.3 创建spring核心配置文件(xml文件)
5.1.4 在spring配置文件中配置userdaoimpl
5.1.5 使用spring的api获得bean实例 (创建applicationContext对象) -
spring下载地址
https://repo.spring.io/release/org/springframework/spring/
2. spring bean的创建
2.1 idea创建maven依赖的项目
2.2 完成项目创建
2.3 配置pom.xml, 引入maven中的依赖关系(这里引入spring框架滴)
该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。事实上,在Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。
2.4 引入框架
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 当前项目信息 --><groupId>org.example</groupId><artifactId>spring_02</artifactId> <!-- 项目名 --><version>1.0-SNAPSHOT</version><dependencies> <!-- 导入依赖关系 spring框架 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.10.RELEASE</version></dependency><dependency><groupId>junit</groupId> <!-- junit 用来测试@Test注解 --><artifactId>junit</artifactId><version>4.13</version></dependency></dependencies></project>
2.5 终于可以配置bean拉,啊啊啊
- 对dao接口的实现类进行bean的创建
package com.lovely.dao;public interface UserDao {public void save();
}
- 实现类
package com.lovely.dao.impl;import com.lovely.dao.UserDao;public class UserDaoImpl implements UserDao {public void save() {System.out.println("save running...");}}
- 创建spring核心配置文件applicationContext.xml 配置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为唯一标识 class为类所在的全路径1--><bean id="userDao" class="com.lovely.dao.impl.UserDaoImpl"> </bean></beans>
- 测试创建的bean
package com.lovely.demo;import com.lovely.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class UserDaoDemo {public static void main(String[] args) {// spring客户端ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");// getBean(id) 来得到实体类对象UserDao dao = (UserDao) app.getBean("userDao");dao.save();}
}
-
打印结果
-
bean通过工厂方式创建
<!-- 工厂模式 静态方法实例bean --><bean id="userDao" class="com.lovely.Factory.StaticFactory" factory-method="getUserDao"></bean>
<!-- 工厂实例方法创建bean --><bean id="factory" class="com.lovely.Factory.DynamicFactory"></bean><bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>
2.6 bean的作用域标签范围
- bean的单例模式和多例模式
// spring容器决定帮你创建单个userdao对象 还是多个userdao对象。<bean id="userDao" class="com.lovely.dao.impl.UserDaoImpl" scope="singleton"></bean><!-- crtl + d 快速赋值一行 scope = singleton 单个对象 scope = prototype 多例模式 -->
- 测试
package com.lovely.test;import com.lovely.dao.UserDao;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringTest {@Testpublic void test1() {ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao1 = (UserDao) app.getBean("userDao");UserDao userDao2 = (UserDao) app.getBean("userDao");// 如果配置bean scope是单例模式 则只产生一个对象// 如果配置bean scope是多例的 则spring容器中每次产生一个对象System.out.println(userDao1 == userDao2);/*** bean标签的创建时机* singleton spring web容器创建,只有一个* prototype 每次创建对象时 就会创建bean 会创建多个 gc回收*/}}
3. bean的生命周期
- bean对象的创建,初始化,容器销毁,bean销毁
package com.lovely.dao.impl;import com.lovely.dao.UserDao;public class UserDaoImpl implements UserDao {public UserDaoImpl() {// 确定bean的生命周期 singleton prototypeSystem.out.println("user dao 创建了");}public void init() {System.out.println("user bean init...");}public void destroy() {System.out.println("user bean destory...");}
}
- 配置文件
<bean id="userDao" class="com.lovely.dao.impl.UserDaoImpl" init-method="init" destroy-method="destroy">
</bean>
- 测试
@Testpublic void test2() {// bean在spring容器中的出生创建ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao dao = (UserDao) app.getBean("userDao");System.out.println(dao);app.close();}
- 从容器的加载到对象的创建,初始化,容器销毁,bean销毁