1 介绍 学习和使用Spring框架有了一段时间,这里将学习心得总结在博客的文章里面。期间也参考学习了其他优秀的文章,如有错误之处欢迎指正,转载请申明原文地址,希望大家支持,谢谢。
2 What:什么是Spring框架 2.1 Spring叫做SE/EE开发的一站式框架,有每一层的解决方案:
Java SE 是Java平台标准版的简称(Java Platform, Standard Edition),用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序。Java SE包括用于开发Java Web服务的类库,同时,Java SE为Java EE提供了基础;
Java EE是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。
(1) Web层:SpringMVC; (2) Service层:Spring的Bean管理,Spring声明式事务; (3) Dao层:Spring的JDBC模板,Spring的ORM模块。
ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
2.2 几个重要的概念: (1) IOC控制反转;
将对象的创建权交给Spring;
好的程序设计满足OCP原则,尽量不修改源码的基础上对程序进行拓展;
工厂+反射+配置文件 实现程序的解耦合。
(2) DI依赖注入;
前提需要有IOC环境.Spring管理的这个类,会将类中属性注入进来;
注入方式包括构造方法注入、set方式注入以及接口注入,Spring属性注入支持前两种,如:
<bean id = "cat" class = "com.A.Cat">
<constructor-arg name = "name" value = "cookie"/>
<constructor-arg name = "color" value = "white"/>
</bean>
<bean id = "cat" class = "com.A.Cat">
<property name = "name" value = "cookie"/>
<property name = "color" value = "white"/>
</bean>
<bean name = "cat2" class = "com.A.Cat2">
<property name = "" ref = ""/>
</bean>
<bean id = "cat" class = "com.A.Cat">
<property name = "cat2" ref = "cat2"/>
</bean>
service层要用dao层对象需要配置到xml配置文件中,对象创建、关系组合都交给spring框架去实现。
(3) Bean的作用范围配置。
scope:Bean作用的范围;
singleton:默认范围,采用单例模式创建这个对象;
prototype:多例模式,通常使用在Struts2和Spring整合时使用;
request:应用在Web项目中,Spring创建类后,将此类存在request范围内;
session:Web环境下,对象与session生命周期一致。
3 Why:为什么使用Spring框架
前面也提到过使用Spring框架的优势,这里补充几点,Spring可以实现更快,更轻松,更安全地编程。 Spring对速度,简单性和生产力的关注使其成为受欢迎的Java EE开发框架。具体来说,主要体现在以下几个方面:
方便解耦,便于开发(Spring就是一个大工厂,可以将所有对象的创建和依赖关系维护都交给spring管理);
spring支持aop编程(spring提供面向切面编程,可以很方便的实现对程序进行权限拦截和运行监控等功能);
Spring注重安全。Spring代码提交者与安全专家合作,修补和测试所有报告的漏洞;
Spring社区支持较好。Spring社区是一个庞大,全球化,多元的社区。
4 How:怎样使用Spring框架 前面也介绍了一些基本用法,包括几种注入方式等,这里补充几点: (1) 创建一个Spring-maven项目;
按照提示创建好maven项目;
在pom.xml文件导入Spring相关的依赖,如:
spring-core、spring-aop、spring-web、spring-test、spring-context等,这些jar的"groupId"都是"org.springframework",每个jar有一个不同的"artifactId",版本号可以按照项目需要选择;
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
</dependencies>
或者可以将${spring.version}定义好,下面直接引用;
<properties>
<spring.version>4.3.12.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
(2) Spring工厂类;
Spring工厂类在旧版中使用BeanFactory,新版中使用ApplicationContext,而且后者继承了前者;
加载配置文件就会将Spring管理的类实例化,在ApplicationContext中有两个实现类,分别是ClassPathXmlApplicationContext---类路径下面配置文件和FileSystemXmlApplicationContext---加载文件系统下面配置文件。
(3) Spring配置Quartz实现定时调度任务;
首先需要引入spring-quartz这个包;
<bean id="importTkbsJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="ImportTkbsData" /> <!-- 执行类的实例 -->
<property name="targetMethod" value="run" /> <!-- 执行方法 -->
<property name="concurrent" value="false" />
<property name="arguments">
<list></list>
</property>
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="importTkbsJob" /> <!-- 上面任务的Task配置bean -->
<property name="cronExpression" value="0 15 * * * ?" /> <!-- 触发时机表达式 -->
</bean>
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
autowire="no">
<property name="triggers">
<list>
<ref bean="cronTrigger" /> <!-- 上面配置的触发器 -->
</list>
</property>
</bean>
(4) 怎样引入Spring.xml文件以及多个配置文件怎样配置; 单纯的Spring-maven项目代码中直接引入即可,如:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml","spring.xml"});
Web项目中引入Spring.xml配置文件:
web.xml文件中引入:主要的是用来配置欢迎页、servlet、filter、listener等以及定制servlet、JSP、Context初始化参数;
加载顺序:web.xml的加载顺序是:<context-param>-><listener>-><filter>-><servlet>;参考实例为:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml,classpath:spring.xml</param-value>
</context-param>
(5) AOP介绍。
AOP(Aspect-OrientedProgramming)面向方面编程,即横切面的方法增强;
使用AOP需要用到的包:spring-aop、spring-aspects、 springsource.org.aopalliance、springsource.org.aspectj.weaver等;
常用使用场景:如权限验证、日志记录、性能统计等横向公共部分;
Aspect:横切面的功能,,抽象出类或接口,AOP编程重要的就是识别出横切面功能;
Advice(通知/增强):增强方法的代码、想要的功能;
Pointcut(切入点):目标对象中,已经被增强的方法;
JoinPoint(连接点):目标对象中,所有可以增强的方法,比如设置属性、调用方法等;
Weaving(织入):将通知应用到连接点形成切入点的过程;
Proxy(代理):将通知织入到目标对象之后形成的代理对象;
实例:设置字符编码格式看作是一个Aspect方面,而拦截器就是一个Advice增强
<!-- 字符编码过滤器-->
<filter>
<filter-name>characterFilter</filter-name>
<filter-class>com.bjpowernode.egov.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterFilter</filter-name>
<url-pattern>*.action</url-pattern>>
</filter-mapping>
通知的几种类型:
前置通知———目标方法运行之前调用;
后置通知———目标方法运行之后调用;
环绕通知———目标方法之前和之后都调用;
异常拦截通知———如果出现异常,就会调用。
参考资料: https://blog.csdn.net/lishuangzhe7047/article/details/20740209 spring框架学习(一) https://blog.csdn.net/itcats_cn/article/details/81479185?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-81479185-blog-20740209.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-81479185-blog-20740209.pc_relevant_default&utm_relevant_index=2 Spring框架总结【无比详细】 https://www.cnblogs.com/themysteryofhackers/p/12006785.html 如何创建Maven项目和Spring IOC例子 https://blog.csdn.net/happyRX/article/details/88545783 Spring配置Quartz实现定时调度任务
|