武汉网站排名哪家好什么叫网络市场营销
概述
分层的轻量级的全栈开源框架
展示层SprigMVC
持久层 Spring JDBCTemplate
业务层事务管理
注:
轻量级:API简单
全栈:各层都有相应解决方案
在Spring的体系结构中,由上而下,逐层依赖
Spring相当于是一个粘合剂,将各层的bean配置到IOC容器中
优点
1.低侵入式设计,代码的污染极低
2. 独立于各种服务器 write once runanyway
3 ioc容器提高组件的解耦
4.Spring提高了与第三方框架的良好整合。简化底层数据库的访问
5.并不强制应用程序完全依赖Spring
注:
污染极低:简单来说就是去除框架后,代码的改动大小,去除框架后,只需要修改一些配置信息
补充(了解):
aop编程的支持:不容易用oop实现的功能,可以用aop轻松实现
声明式事务的支持,传统;采用编码的方式声明事务,声明式可以一次性声明许多事务
方便程序的测试:可以用非容器依赖的方式进行几乎所有的测试工作
传统开发模式的弊端
1.对象之间耦合度高
当用到一个对象中的方法时,通常会在一个对象内部去new另一个对象的实例,然后调用其方法
解决:对象与对象之间不再直接打交道,需要对象时,由容器提供
Spring提供了一个IOC容器,根据配置文件中的信息,进行对象的创建和相关依赖的注入
IOC(Inversion of Controller)
主动创建对象,变为由IOC容器为调用者的成员进行赋值。
1.谁控制、控制了什么
当某个java对象需要调用另一个Java对象的方法时,传统模式下会有两种做法。
一:调用者【主动】创建被依赖依赖,然后再调用被依赖对象的方法
二: 简单工厂模式,调用者首先找到被依赖对象的工厂,然后主动通过工厂获取被依赖对象,最后调用被依赖对象的方法
2.何为反转
调用者主动创建依赖对象改为被动接受Spring容器为调用者的成员赋值
总结:由调用者主动控制对象的创建变为容器控制对象的创建,由主动创建变为被动接受
DI(Dependency Injection)
拿到对象的属性,已经被注好相关值,直接使用即可
方式:
1.值注入:通过成员变量的setter方法进行注入
2.构造方式注入
区别:通过成员变量的setter方法进行注入 简单易理解使用较多,构造方式注入可以决定依赖关系的注入顺序 所有的依赖关系全部在构造器内设定、无需担心后续代码对依赖关系产生破坏。
总结:设值注入为主,构造注入为辅 依赖关系无变化的注入,构造注入为主,其它值注入
Bean
IOC容器创建管理的Java对象
作用域:
1. singleton 单例模式 bean 在整个容器中仅存在一个实例
2.prototype 每次getBean时都将产生一个实例
3.request 一次请求将产生一个新对象
4.seeion域
5.global session 每个全局的session对应一个Bean实例
注:3、4、5仅在web应用程序中IOC容器创建管理的Java对象
获取方式:
ApplicationContext中获取
可以通过id或者类型进行获取
相关实现类:
ClassPathXmlApplicaionContext:从resources目录根据配置文件创建Spring容器
FileSystemXmlApplicationContext:根据文件的绝对路径创建Spring容器
AnnotationConfigApplciaitonContext(xxx.class)
WebApplicationContextUtils:导入Spring-web后,获取容器的API为此
数据源(连接池)
数据源是提高程序性能出现的
事先实例化数据源,初始化部分连接资源
使用连接资源时从数据源获取,使用完毕后将连接资源归还给数据源
常用数据源Druid c3p0
重点配置
<bean>标签
id属性:在容器中Bean实例的唯一标识,不允许重复
class属性:要实例化的Bean的全限定名
scope属性: Bean的作用范围,常用的是Singleton(默认)和prototype
<propety>标签:属性注入
name属性:属性名称
value属性:注入的普通属性值
ref属性:注入的对象引用值
<list> 标签
<map>标签
<properties>标签
<constructor-arg>标签
原始注解
主要用来替换Bean的相关配置
@Componnet 用在类上实例化bean
@Controller 用在web层类上用来实例化bean
@Service 使用在service层类上实例化bean
@Respository 使用在dao层类上实例化bean
@Autowired 使用在字段上根据类型进行依赖注入
@Qualifier 结合@AutoWired根据名称进行依赖注入
@Resource 相当于@AutoWired +@Qualifier 根据名称进行依赖注入, 需加name
@Value 注入普通属性
@Scope 标注bean的作用范围
@PostConstrust 使用在方法上,标注该方法是bean的初始化方法
@PreDestroy 使用在方法上,标注该方法是bean的销毁方法
使用原始注解,需要用到包扫描
<context:component-scan base-package="edu.shu.spring.domain"/>
注:可以同时使用到两个包扫描
新注解
以上注解不能替代所有的Spring配置
1.第三方bean
2.引入的其它文件
3.零配置中需要用到的包扫描
@Configuration 用在类上,标志该类是一个Spring的配置类
@ComoponentSan (包扫描路径) 用在类上
@import (xxx.class)用来加载分的配置类, 里面其实是一个数组
出错点
getBean方法调用异常
Spring中提供了有参构造,不提供默认的无参构造,会导致getBean时异常
原因:getBean方法内部通过反射的方式创建对象
配置文件
开发阶段和运行阶段一样,项目发布后,内部可以动态更改