SSM框架---Spring
2021-03-31 22:53:32 27 举报
AI智能生成
请大家不要直接克隆,着手梳理一遍才会变成自己的知识
作者其他创作
大纲/内容
Spring
背景知识
前身
interface21
2002年发布
作者
Jod Johnson
音乐学博士
spring的理念
简化企业级开发,整合现有技术框架
Spring是什么
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架
为什么要使用Spring
1、方便解耦
2、支持aop编程
3、支持事务处理
4、可以集成各种优秀框架
Spring配置
Bean的配置
<bean id=\"user\" class=\"com.learning.pojo.User\" name=\
id代表名字
class绑定pojo类,需要全限定名
name是起别名用的,分隔符可以是空格、逗号、分号
import
一般用于团队开发
别名(Bean的name也可以取别名)
别名和原名都可以取到对象
<alias name=\"user\" alias=\"user2\"/>
控制反转IOC
它是一种思想
把程序运行的决定权从程序员手中交给用户
优点
⭐解耦!
核心
工厂模式
IOC创建对象的时间
⭐在把bean注册到bean.xml的时候就已经初始化对象了,而不是在使用时才初始化
IOC创建对象的方式
1、使用无参构造函数创建(默认)
<bean id=\"user\" class=\"com.learning.pojo.User\"> <property name=\"username\" value=\"Spring\"/> </bean>
property可以为对象设置属性值
2、有参构造函数创建
1、下标赋值创建
<bean id=\"user\" class=\"com.learning.pojo.User\"> <constructor-arg index=\"0\" value=\"1\"/> <constructor-arg index=\"1\" value=\"root\"/> <constructor-arg index=\"2\" value=\"123456\"/> </bean>
2、通过类型创建(不能解决重复参数类型属性,所以不推荐)
<bean id=\"user\" class=\"com.learning.pojo.User\"> <constructor-arg type=\"java.lang。int\" value=\"1\"/> <constructor-arg type=\"java.lang.String\" value=\"root\"/> ⭐<constructor-arg type=\"java.lang.String\" value=\"123456\"/>⭐</bean>
3、直接通过参数名创建
<bean id=\"user\" class=\"com.learning.pojo.User\"> <constructor-arg name=\"id\" value=\"1\"/> <constructor-arg name=\"username\" value=\"root\"/> <constructor-arg name=\"password\" value=\"123456\"/></bean>
实现方式
1、通过xml配置
1、在beans.xml中添加bean标签
普通创建方式
User user = new User();
SpringIOC方式
id就是getBean方法的参数,class绑定pojo类,property设置对象属性
2、在需要使用类的地方通过ClassPathXMLApplicationContext获取
//获取Spring的上下文对象ApplicationContext context = new ClassPathXmlApplicationContext(\"beans.xml\"); //我们的对象都在Spring的管理中了,我们只需要从里面取出来用就可以了 Object user = context.getBean(\"user\");
2、通过注解实现
实现结果
对象由Spring创建、管理、装配
DI依赖注入
1、构造器注入
2、set注入⭐
普通类型
<property name=\"username\" value=\"徐虎\"/>
Bean注入
<property name=\"address\" ref=\"address\"/>
数组
<property name=\"relation\"> <array> <value>爸爸</value> <value>妈妈</value> <value>妹妹</value> </array> </property>
list
<property name=\"hobbies\"> <list> <value>听歌</value> <value>敲代码</value> <value>看电影</value> </list> </property>
Map
<property name=\"card\"> <map> <entry key=\"一卡通\" value=\"20181004116\"></entry> </map> </property>
Set
<property name=\"games\"> <set> <value>王者荣耀</value> </set> </property>
⭐null空值(不是空串)
<property name=\"wife\"> <null></null> </property>
Properties
<property name=\"info\"> <props> <prop key=\"学号\">20181004116</prop> <prop key=\"专业\">软件工程</prop> </props> </property>
值必须写在prop标签中间
3、扩展注入方式
p命名空间
直接注入属性值
p:XXX = \"\"
c命名空间
通过构造器注入属性值
c:XXX = \"\"
4、Bean Scopes(Bean作用域)
singleton(默认)
单例模式
prototype
原型模式
每次getBean()都是一个新对象
session
web中使用
request
配置方式
<bean id=\"\" class=\"\" scope=\"session/prototype/session/request\">
Bean的自动装配
三种装配方式
1、xml装配
2、java中装配
3、隐式的自动装配⭐
自动装配
1、ByName
<bean id=\"\" class=\"\" autowire=\"byName\">
被自动装配bean的id必须是set后面的值
2、ByType
<bean id=\"\" class=\"\" autowire=\"byType\">
被装配的bean只能被注册一次
3、注解装配⭐
@autowired
ByName方式装配
可以使用 @Qualifier(value = \"XXX\")配合
@Resource
先ByName,再ByType
配置
1、xmlns:context=\"http://www.springframework.org/schema/context\"
2、<context : annotation-config/>
3、xsi:schemaLocation添加http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
使用注解开发
步骤
1、导入aop包
2、application.xml(beans.xml)中配置扫描路径
<context:component-scan base-package=\"com.learning.pojo\"/>
3、在类名上增加@Component注解
等价于<bean id=\"user\" class=\"com.learning.pojo.User\" />
4、在属性或者属性对应的set方法上增加@Value注解
@Value(\"小明\")
注解
把类注册到Spring容器中,装配bean
pojo
@Component
mapper
@Repository
service
@Service
controller
@Controller
作用域注解
@Scope
最佳实践
xml用来注册bean
@Value注解注入属性值
⭐注意
注解生效必须扫描对应的包
<context:component-scan base-package=\"com.learning.pojo\"/> <context:annotation-config/>
使用Java的方式配置Spring
1、创建Config包、类
2、添加@Configuration注解
@Configuration本质也是一个component组件,这个配置类也会被Spring接管
3、添加@ComponentScan(\"com.learning.pojo\")注解扫描包
4、在pojo实体类中添加@Component注解,把对象交给Spring管理
5、在配置类里面写实体类的方法,这里的函数名就是bean的id,添加@Bean注解
pre style=\
代理模式
静态代理
1、解耦
2、方便业务管理
缺点
1、代码量大(一个被代理类就需要一个代理类)
动态代理
本质
反射机制
代理的对象
代理的是接口
两大类
基于接口的动态代理
JDK动态代理
基于类的动态代理
Java字节码实现动态代理
两个类
Prxy
invocationHandler
面向切面编程AOP
三种方式
1、原生API实现
2、使用定义类实现
3、注解实现
切面类
ApplicationContext.xml
整合Mybatis
1、导入依赖
junit测试
mysql
mybatis
spring
spring-jdbc
aspectjweaver
mybatis-spring
2、环境准备
1、编写dataResource数据源
2、注册SqlSessionFactory
3、注册SqlSessionTemplate
4、把实现的mapper注册进spring
3、测试
1、使用set绑定SqlSession
2、继承SqlSessionDaoSupport
声明式事务
1、回顾事务
特点
一组业务要么都成功、要么都失败
效果
保护数据一致性
ACID原则
原子性
一致性
隔离性
持久性
2、使用
0 条评论
下一页