Spring入门案例
Spring简介
Spring是什么
Spring
是一个IOC(控制反转)和AOP(面向切面编程)为内核的轻量级容器框架。Spring
使得创建java企业级应用变得容易,提供了在企业环境中使用Java语言所需的一起,可以根据应用程序的需求灵活地创建多种体系结构。
Spring核心
- IOC
- AOP
Spring优势
- 轻量级
- 声明式事务支持
- 方便程序测试
- 方便集成优秀框架
Spring体系结构
程序的耦合和解耦
-
耦合:程序之间依赖关系
-
解耦:降低程序间依赖
解决思路: 编译期间不依赖、运行时才依赖
- 通过配置文件的方式,来获取要使用的对象全限定类型
- 程序中使用反射机制创建对象,避免使用
new
关键字创建对象
-
解决思路
工厂模式
解耦:DEMOSpring
的IOC
Spring入门案例
-
创建maven工程
-
配置依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> </dependency> </dependencies>
-
创建包目录
-
创建
Spring
配置文件ApplicationContext.xml
把对象交给
Spring
来管理;id
: 唯一标识class
:全限定类名<?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"> <!-- 把对象的创建交给spring来管理 每一个bean代表一个对象 id : 唯一标识 class: 全限定类名 --> <bean id="userService" class="com.wh.service.impl.UserService"></bean> <bean id="userDao" class="com.wh.dao.impl.UserDao"></bean> </beans>
-
从
Spring
容器中获取对象并使用import com.wh.service.IUserService; import com.wh.service.impl.UserServiceImpl; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestUserCRUD { public static void main(String[] args) { // 1. 通过资源路径获取ApplicationContext 获取核心容器 ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); // 2. 通过唯一标识获取对象 IUserService userService = context.getBean("userService", UserServiceImpl.class); userService.createUser(); } }
ApplicationContext
ApplicationContext
是一个维护bean定义以及相互依赖的注册表的高级工厂的接口, 通过T getBean(String name, Class<T> requiredType)
可以获取对象实例。
ApplicationContext
支持不同的配置源读取bean定义
ClassPathXmlApplicationContext
:可以加载类路径下的xml
文件FileSystemXmlApplicationContext
:可以加载磁盘任意位置的配置文件(必须要有访问权限)AnnotationConfigApplicationContext
:读取注解
配置的容器
Bean总览
1. Bean标签
1. Bean的作用范围和生命周期
-
bean
标签中的scope
属性可以控制Bean的生命周期singleton
: 单例prototype
:多例request
:将对象放入request域中session
:将对象放入session域中global session
: 将对象放入集群的会话作用域范围中
-
单例和多例区别
- 单例: 每个应用只有一个该对象的实例,它的作用范围就是整个应用; 单例对象的创建与销毁 和 容器的创建与销毁时机一致
- 对象出生: 当应用加载,创建容器时,对象就被创建
- 对象活着: 只要容器存在,对象一直活着
- 对象死亡: 当应用卸载,销毁容器时,对象就被销毁
- 多例:每次访问对象,都会创建一个新实例; 多例对象的创建与销毁时机不受容器控制
- 对象出生: 当使用对象时,创建新的对象实例
- 对象活着: 只要对象在使用中,就一直活着
- 对象死亡: 当对象长时间不用时,被 java 的垃圾回收器回收了
- 单例: 每个应用只有一个该对象的实例,它的作用范围就是整个应用; 单例对象的创建与销毁 和 容器的创建与销毁时机一致
2. 实例化Bean的三种方式
-
使用默认无参构造函数创建对象
<bean id="userService" class="com.wh.service.impl.UserServiceImpl"></bean>
-
使用静态工厂方法创建对象
package com.wh.factory; import com.wh.service.IUserService; import com.wh.service.impl.UserServiceImpl; public class StaticFactory { public static IUserService createUserService(){ return new UserServiceImpl(); } }
<!--使用静态工厂创建userService--> <!--com.wh.factory.StaticFactory: 静态工厂全限定类名--> <!--createUserService: 静态工厂名--> <bean id="userService" class="com.wh.factory.StaticFactory" factory-method="createUserService"> </bean>
-
使用实例工厂方法创建对象
package com.wh.factory; import com.wh.service.IUserService; import com.wh.service.impl.UserServiceImpl; public class InstanceFactory { public IUserService createUserService(){ return new UserServiceImpl(); } }
<!--定义实例工厂全限定类名--> <bean id="instanceFactory" class="com.wh.factory.InstanceFactory"></bean> <bean id="userService" factory-bean="instanceFactory" factory-method="createUserService"> </bean>
来源:https://www.cnblogs.com/weicunheng/p/12637148.html