一.Spring就这路子得背一下
敲一敲好吧!!!
1.Spring概念
Spring是一个轻量级的框架,也是一个容器,主要用来管理bean工厂。利用Spring可以大幅提高开发代码的效率,也可以大幅降低代码之间的耦合度。
2.IOC(控制反转)与DI(依赖注入)
不是一种设计模式而是一种思想,是同一概念在不同时期由不同人提出的。其主要思想是程序员不需要主动去创建对象获取实例而是将这个任务交给Spring被动创建对象及其实例。就好比点外卖,我们有时候不想自己做饭,通过点外卖可以将此任务交由第三方进行处理下单,然后将外卖送至你的手中。
IOC容器的本质是XML文件,创建对象以及查找依赖对象的工作交给了Spring。
3.Spring的组成
分别是:数据访问与集成、面向切面编程、instrumentation、spring核心容器、web原创调用、测试。
4.Spring IOC容器的工作原理
首先对xml文件里的bean的配置信息进行读取,然后进行装配,最后由客户端发出请求从容器中获取对象。
5.IOC容器的两种类型
1.Spring BeanFactory容器 基础级的容器
2.Spring ApplicationContext容器 企业级的容器,可以从属性文件中解析文件信息并将事件传递给监听器。包括1的所有内容,实际开发中要采用大于或等于1的级别。
其内容包括:a.FileSystemXmlApplicationContext(需要Path路径)
b.ClassPathXmlApplicationContext(最常用) c.XmlWebApplicationContext d.AnnotationConfigApplicationContext e.AnnotatonConfigWebApplicationContext
6.利用IOC管理Bean
①.基于xml的配置:
1.属性注入(setter)
是通过标签来定义的,有多少属性就配置多少个property ****ref
2.构造器注入
是通过
3.集合属性注入
可通过list标签进行集合注入。
7.bean的作用域
a.singleton(每次只允许创建一个bean实例,缺省情况下的默认值,在IOC容器初始化时就获取对象。可以使用lazy-init来指定是否延迟创建)
b.prototype(通过getBean()方法获取实例,每次调用bean即可获取一个实例,在用户调用对象时获取对象)
c.request(每有一个http请求即获取一个实例,仅适用与webApplicationContext环境)
d.session(同一个http session获取同一实例,不同http session获取不同实例。仅适用与webApplicationContext环境)
e.globalsession
8.bean的生命周期
bean的生命周期经历了
(1).首先要通过三种注入方式进行bean的注入,然后需要将其进行前置处理,选择bean的init-method属性,然后在对应的pojo类中添加方法。
(2).然后进行bean的使用,在使用完毕后进行后置处理,选择destroy-method属性,然后在对应的pojo类中添加方法,最后进行bean的销毁。
这样就是一个完整的bean的生命周期,用过程描述如下:
实例化对象→bean的注入→调用BeanPostProcessor接口的before方法→调用initializingBean的after方法→init-method属性指定的方法→调用BeanPostProcessor接口的after方法→bean的作用域→调用disposable的destroy方法→destroy-method属性指定的方法
9.bean的继承关系
关于bean之间的继承需要用到 parent属性。分别有四种方式:
(1).直接在pojo中创建子类
(2).基于xml下的,通过bean的继承实现类的继承
(3).基于xml下的,将相同属性值提取出来定义一个父类bean,然后让所有的子类bean继承他并进行重写。
(4).定义抽象bean,可以将abstract设置为true
总结来看,关于bean的继承关系与java中类的继承关系有很大区别。前者是实例与实例之间的继承关系,后者是类与类之间的继承关系。
10.bean的自动装配
使用Autowire属性设置为true便可实现对bean的自动装配,而bean的自动装配类型又有
a.default 默认不使用自动装配。
b.byName 通过bean的setter方法名进行自动装配,通过bean的id与setter方法的首字母小写并去掉set的字段进行匹配,若匹配成功,则返回对象。
c.byType 通过setter方法的形参类型进行自动装配,若找到一个setter方法与bean匹配,则返回对象;若找到多个,输出异常;若没找到,无动作发生。
d.constructor 通过bean的无参、有参构造器进行自动装配。
11.基于注解的管理
@Component 用于vo模型层
@Service 用于业务层
@Controller 用于表现层,表明该类扮演控制器的角色
@Repository 用于持久层
@Autowired 自动装配Bean
@RequestMapping 处理http请求到指定的URL
@Resource bean的注入
@Scope bean的作用域
@preDestroy @PostConstruct Bean的生命周期
*开启包的注解扫描
ContextComponentScan
SpringMVC@Controller、@Service、@Repository和 @Component 将类标识为Bean,这样Spring就能对其依赖注入
Spring引入了一些注解用于简化 Spring 的开发。
@Repository注解它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。
具体只需将该注解标注在 DAO类上即可。同时,为了让 Spring 能够扫描类路径中的类并识别出 @Repository 注解,需要在 XML 配置文件中启用Bean 的自动扫描功能,这可以通过实现。如下所示:
// 首先使用 @Repository 将 DAO 类声明为Spring Bean
package cn.jobs1127.dao;
@Repository
public class CommonHibernateBaseDaoImpl implements ICommonHibernateBaseDao {……}
// 其次,在 XML 配置文件中启动 Spring 的自动扫描功能
…… ……如此,我们就不再需要在 XML 中显式使用 进行Bean 的配置。Spring 在容器初始化时将自动扫描 base-package 指定的包及其子包下的所有 class文件,所有标注了 @Repository 的类都将被注册为 Spring Bean。
@Repository 只能标注在 DAO 类上。
该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。
Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。
@Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。接收前台的请求/参数通过@Service服务层进行数据库等操作,将数据库的信息返回到前端,根据需要进行控制、跳转等操作。
@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
@Service 通常作用在业务层,也就服务层,但是目前该功能与 @Component 相同。在服务层通常自动注入与DB打交道的Dao Bean
通过在类上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring会自动创建相应的Bean对象,并注册到 ApplicationContext 中。这些类就成了 Spring受管组件。这三个注解除了作用于不同软件层次的类,其使用方式与 @Repository 是完全相同的。
与通过 XML 配置的 Spring Bean 一样,通过上述注解标识的Bean,其默认作用域是”singleton”单例模式,为了配合这四个注解,在标注 Bean 的同时能够指定 Bean 的作用域,Spring2.5 引入了 @Scope 注解。使用该注解时只需提供作用域的名称就行了,如下所示:
@Scope(“prototype”)
@Repository
12.Spring的AOP
AOP:即面向切面编程,采用这种方式可以大幅降低模块之间的耦合度,可以是各个模块的业务逻辑得到较好的分离,即为业务逻辑设立不同的多个切面和切入点,在访问时只需将连接点连入切入点进而访问切面,同时,会进行一些增强处理。
13.AspectJ和AOP的区别
AspectJ是需要特定的编译器的且其是一个面向切面的框架,而AOP不需要特定的编译器,是通过动态代理的方式实现的创建对象的过程。
14.AOP增强处理的类型
a.前置增强处理(目标方法执行前)b.后置增强处理(目标方法执行后)c.环绕增强处理(目标方法执行前后,一般用于多线程)d.抛出异常增强处理(目标方法执行抛出异常后)
在xml文件中基于零注解的配置:aop:aspectj-autoproxy/
15.AOP的配置
a.基于注解的配置:使用@pointcut注解中的execute方法
b.基于xml的配置:使用aop:config../标签配置
要么全部使用基于注解的配置,要么全部使用基于xml的配置。一旦混用将会报错发生异常。
16.数据库连接池
数据库连接池负责分配、管理和释放连接。使用数据库连接池可以提高数据库的可利用性
并提高数据库的效率,能有效避免数据丢失。
a.C3P0
需要在xml配置的:扫描包结构,加载外部配置文件,定义配置文件(jdbcDriver,jdbcUrl,jdbcUsername,jdbcPsw),最小连接数,最大连接数(要注意最小与最大的差距),关闭连接后不自动commit,获取连接失败重试的次数。
b.DBCP
c.proxool
17.Spring的事务,事务的作用。
? 编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。
? 声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务
作者:奔腾的心
来源:CSDN
原文:https://blog.csdn.net/qq_29706435/article/details/82380893
版权声明:本文为博主原创文章,转载请附上博文链接!