文章目录
目录
目录
前言
首次使用博客记录学习
一、SSM是什么?
SSM框架是spring、spring MVC 、和mybatis框架的整合,是标准的MVC模式。标准的SSM有四层架构,简化企业级开发的复杂性,框架整合高效整合其他技术,提高企业级应用开发与运行效率,
简化开发的技术
IoC
AOP
事物处理
框架整合
MyBatis
MyBatis- plus
Struts
Hibernate
具有完整的开发的生态圈,Spring提供若干项目,每个项目可用于完成特定的功能
框架
Spring Framework 系统架构
Ioc(Inversion of Control) 控制反转:使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移给外部,此思想称为控制反转,可降低代码的耦合性
Spring 技术 提供了一个容器,称为IoC容器,用来充当Ioc思想中的外部
IoC容器负责对象的创建、初始化等一系列的工作,被创建或被管理的对象在IoC容器中统称为Bean
DI(Dependency Injection)依赖注入 (将有依赖关系的bean进行关系绑定)
在容器中建立bean 与 bean 之间的依赖关系的整个过程,称为依赖注入
二、使用IOC
1.入门案例
管理Service 与 Dao
将被管理的对象告知IOC容器(配置)
获取IoC容器(接口)
获取容器中的bean
第一步:先在pom.xml导包
配置文件的代码如下(示例):
两个版本若一个版本报错可尝试另外一个
<dependency>
<groupId>org.springframework</groupId>
<artifactId>sping-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
第二步:在resource 文件夹 中创建 spring 文件导入spring 的坐标
<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 的 坐标 spring-context 对应的版本-->
<!-- 配置bean-->
<!-- bean标签标识配置bean
id属性标识给bean起名字
class属性表示给bean定义类型-->
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
</bean>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<!--7.配置server与dao的关系-->
<!--property标签表示配置当前bean的属性
name属性表示配置哪一个具体的属性
ref属性表示参照哪一个bean-->
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
调用bean的属性需要在主程序中获取Ioc容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
(applicationContext.xml是spring文件的地址)
通过getBean 的方法获取bean
2.bean的配置
1;bean的基础配置
2;bean的别名配置
bean可以定义多个别名通过使用逗号,分号 空格分隔
3;bean的作用范围配置
bean 默认单例模式,节省资源
适合交给容器进行管理的bean
表现层对象、业务层对象、数据层对象、工具对象
不适合交给容器进行管理的bean
封装实体的域对象
bean 的实例化
1、使用构造方法实现bean的实例化
2、使用静态工厂
静态工厂
dao层
//定义一个接口
public interface OrderDao {
public void save();
}
//接口的实现类
public class OrderDaoImpl implements OrderDao {
public void save() {
System.out.println("public save");
}
}
//工厂类对象
public class OrderDaoFactory {
public static OrderDao getOrderDao(){
return new OrderDaoImpl();
}
}
//sping文件
<bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"></bean>
</beans>
//主程序调用
public class AppForinstanceOrder {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
OrderDao orderDao = (OrderDao) ctx.getBean("orderDao");
orderDao.save();
}
}
3、实例化工厂
public class UserDaoFactoryBean implements FactoryBean<UserDao> {
public UserDao getObject() throws Exception{
return new UserDAoImpl();
}
public Class<?> getObjectType() {
return UserDao.class;
}
}
生命周期的控制
实现InitializingBean,DisposableBean 接口
public class BookServiceImpl implements BookService . InitializingBean ,DisposableBean {
}
依赖注入方式
1.setter 注入
标签为<property name = "" ref = "">
2.构造器注入
//sping配置
<bean id="bookDao" class="com.itheima.service.impl.BookServiceImpl" >
<constructor-arg name = "bookDao" ref= "bookDao"/>
</bean>
//简单方法注入
<bean id="bookDao" class="com.itheima.service.impl.BookDaoImpl" >
<constructor-arg name = "//自定义的名字" value= ""/>
</bean>
//service层
//直接生成构造方法
依赖注入方式的选择:
1.强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现、
2.可选依赖使用setter注入进行,灵活性强
3. Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨
4.如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入
5.实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入
6.自己开发的模块推荐使用setter注入
依赖的自动装配
1.按类型
<autowire="byType">
2.按名称
<autowire="byName">
依赖自动装配的特征
自动装配用于引用类型依赖注入,不能对简单类型进行操作
使用按类型装配时 ( byType )必须保障容器中相同类型的bean唯一,推荐使用
使用按名称装配时( byName )必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用
自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
管理第三方的maven库格式
//管理DruidDataSource对象
<bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource"
<property name = "driverClassName" value = "com.mysql.jdbc.Driver"
<property name = "url" value = "jdbc://mysql://localhost:3306/....."
<property name = "uesrname" value = ""/>
<property name = "password" value = ""/>
</bean>
核心容器总结
这里对文章进行总结
容器相关
BeanFactory 是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载
ApplicationContext 接口是Spring容器的核心接口,初始化时bean立即加载
ApplicationContext接口提供基础的bean相关的方法,通过其他的接口扩展其功能
ApplicationContext接口常用初始化类
ClassPathXmlApplicationContext
FIleSystemXmlApplicationContext
Bean相关
<bean
id = "bookDao" //bean的id
name = "dao bookDaoIMpl" //bean的别名
class = "com.itheima.dao.impl.BookImpl" //bean 的类型 静态工厂类
scope="singleton" //控制bean的实例数量
init-method= "init" //生命周期的初始化方法
destroy-method="destory" //生命周期的销毁方法
autowire = "byType" //自动装配类似
factory-method = "getInstance" //bean的工厂方法应用于静态工厂或者实例工厂
lazy-init = "true" //控制bean延迟加载
/>