Spring Framework
SpringMVC+Spring+Hibernate框架整合原理,作用及使用方法

SpringMVC+Spring+Hibernate框架整合原理,作⽤及使⽤⽅法SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层使⽤spring MVC负责请求的转发和视图管理spring实现业务对象管理,mybatis作为数据对象的持久化引擎原理:SpringMVC:1.客户端发送请求到DispacherServlet(分发器)2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller3.Controller调⽤业务逻辑处理后,返回ModelAndView4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图5.视图负责将结果显⽰到客户端Spring:我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们中的类,当然也包括service dao⾥⾯的),有了这个机制,我们就不⽤在每次使⽤这个类的时候为它初始化,很少看到关键字new。
另外spring的aop,事务管理等等都是我们经常⽤到的。
Mybatis:mybatis是对jdbc的封装,它让数据库底层操作变的透明。
mybatis的操作都是围绕⼀个sqlSessionFactory实例展开的。
mybatis通过配置⽂件关联到各实体类的Mapper⽂件,Mapper⽂件中配置了每个类对数据库所需进⾏的sql语句映射。
在每次与数据库交互时,通过sqlSessionFactory拿到⼀个sqlSession,再执⾏sql命令。
使⽤⽅法:要完成⼀个功能:1. 先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。
2. 写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进⾏的那些操作,⽐如 insert、selectAll、selectByKey、delete、update等。
掌握常用框架的基本用法与应用场景

掌握常用框架的基本用法与应用场景常用框架的基本用法和应用场景可以根据具体的框架来进行讨论。
以下是几个常用框架的基本用法和应用场景。
1. Spring框架:Spring是一个轻量级的Java开发框架,提供了一站式的解决方案,包括依赖注入、AOP、事务管理、Web开发等。
在Spring框架中,可以通过注解或XML配置来管理各个组件之间的依赖关系,并利用Spring的IOC容器来管理对象的生命周期。
应用场景包括Web应用开发、企业应用开发、中小型项目开发等。
2. Hibernate框架:Hibernate是一个Java持久化框架,它提供了将Java对象映射到数据库表的解决方案。
通过Hibernate,开发人员可以简化数据库操作,使用面向对象的方式来进行数据库访问,提高开发效率。
应用场景包括ORM映射、事务管理、性能优化等。
3. Django框架:Django是一个基于Python的Web开发框架,致力于提供高效的、安全的Web应用程序开发解决方案。
它采用了MTV (Model-Template-View)的设计模式,通过模型(Model)与数据库交互,通过模板(Template)生成HTML页面,通过视图(View)处理用户请求。
应用场景包括Web应用开发、数据分析平台搭建等。
4. React框架:React是一个用于构建用户界面的JavaScript库,它提供了高效的组件化开发方式,通过虚拟DOM的技术实现了高性能的界面渲染。
React可以与其他框架或库(如Redux、React Router)结合使用,用于构建单页应用、移动应用等。
应用场景包括前端开发、跨平台移动应用开发等。
除了以上几个框架,还有许多其他常用框架,如Angular、Vue.js、Express等,它们都有各自的特点和适用场景。
掌握这些常用框架的基本用法和应用场景,可以帮助开发人员更高效地进行软件开发,提高开发质量和效率。
此外,不仅要掌握框架的基本用法,还要提升自己的拓展能力,如深入学习框架的源码、参与开源社区、阅读相关的技术文章和书籍等,才能更好地应对各种应用场景和解决复杂问题。
SSH框架整合常见异常

spring+hibernate出错小结:(1)ng.NoClassDefFoundError: org/hibernate/context/CurrentSessionContext原因:出现这错误时,请更改hibernate的包,更新至最新或3.1以上(2)ng.NoClassDefFoundError: javax/transaction/TransactionManager原因:缺少jta.jar 或者是找不到hbm.xml文件导致sessionfactory出错,检查hbm文件路径是否正确,文件是否存在(3) 错误:Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update或者org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not insert: [com.yourcompany.model.Login]; bad SQL grammar [insert into mysql__login (name,password) values (?,?)]; nested exception is java.sql.SQLException: Table'mysql.mysql__login' doesn't exist java.sql.SQLException: Table 'mysql.mysql__login' doesn't exist原因与解决:因为Hibernate Tools(或者Eclipse本身的Database Explorer)生成*.hbn.xml 工具中包含有catalog="***"(*表示数据库名称)这样的属性,将该属性删除就可以了(4)org.springframework.orm.hibernate3.HibernateQueryException: undefined alias原因:在spring配置文件中,可能你设置了<prop key="hibernate.query.factory_class"> org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>,指定了HQL的解释器,请删除或更改另一个解释器org.hibernate.hql.ast.ASTQueryTranslatorFactory,如果没有设置,请确认是否有写错了HQL语句,是否与POJO里的属性一样。
史上最简单RabbitMQ中IO流异常的解决org.springframework.amq。。。

史上最简单RabbitMQ中IO流异常的解决
org.springframework.amq。
针对 RabbitMQ总结报错原因
⾸先第⼀个问题连接问题有时候你登陆 15672端⼝号可以登上展⽰给⾃⼰看
但是它并不是 mq ⾥⾯运⾏的那个 5672端⼝号只是页⾯上显⽰的 15672端⼝⽹址此时你安装的MQ有问题。
造成⽆法使⽤⽆法连接问题解决办法就是卸了重装⼀定是端⼝号问题设置端⼝号⼀定要仔细。
第⼆个问题是登陆guest 创建的新⽤户却没有权限(没有添加删除修改的权限)当我们发送消息rabbitTemplate.convertAndSend("sms", map); 此时的 sms 是在新⽤户⾥⾯接不到消息的。
那么解决办法就是在 15672端⼝⽹页点击 Admin 修改新⽤户权限
加油!。
Spring试题及答案

Spring考试试题1)下面关于Spring的说话正确的是()(选择两项)A)Spring是一个重量级的框架B)Spring是一个轻量级的框架C)Spring是一个IOC和AOP容器D)Spring是一个入侵式的框架2)下面关于IOC的理解,正确的是()(选择两项)A)控制反转B)对象被动的接受依赖类C)对象主动的去找依赖类D)一定要用接口3)下面关于AOP的理解,正确的是()(选择两项)A)面向纵向的开发B)面向横向的开发C)AOP关注是面D)AOP关注的是点4)Spring的组成一共有()块组成。
A)1 B)3 C)5 D)75)Spring各模块之间关系()(选择两项)A)Spring各模块之间是紧密联系的,相互依赖的B)Spring各模块之间可以单独存在C)Spring的核心模块是必须的,其他模块是基于核心模块D)Spring的核心模块不是必须的,可以不要6)Spring核心模块的作用()A)做AOP的B)做IOC的,用来管理Bean的C)是用来支持HiberneteD)是用来支持Struts的7)对Hibernate的支持主要用到Spring的那个模块()A)Spring核心模块B)Spring ORM模块C)Spring MVC模块D)Spring Web模块8)对Struts的支持主要用到Spring的那个模块()A)Spring核心模块B)Spring ORM模块C)Spring MVC模块D)Spring Web模块9)Spring的通知类型有()(多项选择)A)Before通知B)After return通知C)Throws通知D)Around通知10)下面关于切入点的说法正确的是()(多项选择)A)是AOP中一系列连连接点的集合B)在做AOP时定义切入点是必须的C)在做AOP时定义切入点不是必须的D)可以用正则表达式来定义切入点11)Spring包装Hibernate之后的Hibernate的DAO应该继承那个类()A)HibernateDAOB)SessionFactoryC)HibernateDAOSuportD)Session12)下面对Spring包装Struts1.2的说法正确的是()(选择两项)A)Spring包装Struts的ActionServletB)Spring包装Struts的ActionC)主要是利用Spring的依赖注入D)主要利用Spring的面向方面的编程13)Spring包装Struts时那些Spring模块是必须的()(选择两项)A)Spring核心模块B)Spring AOP模块C)Spring MVC模块D)Spring WEB模块14)Spring中Before通知的目标对象要实现的接口是()A)MethodBeforeAdviceB)ThrowsAdviceC)AfterReturningAdviceD)MethodInterceptor15)Spring中around通知的目标对象要实现的接口是()A)MethodBeforeAdviceB)ThrowsAdviceC)AfterReturningAdviceD)MethodInterceptor16)Spring中Before通知的目标对象要实现的接口中before方法中的三个常用的参数依次是()A)方法,方法的参数,目标对象B)方法的参数,方法,目标对象C)目标对象,方法,方法的参数D)方法的参数,目标对象,方法17)Spring中around通知的目标对象要实现的接口中invoke中方法的参数是()A)方法B)目标对象C)方法执行参数D)Exception18)下面是Spring依赖注入方式的是()(选择两项)A)set方法注入B)构造方法的注入C)get方法的注入D)接口的注入19)下面关于在Spring中配置Bean的id属性的说法正确的是()(选择两项)A)id属性是必须,没有id属性就会报错B)id属性不是必须的,可以没有C)id属性的值可以重复D)id属性的值不可以重复20)下面关于在Spring中配置Bean的name属性的说法正确的是()(选择两项)A)name属性是必须,没有name属性就会报错B)name属性不是必须的,可以没有C)name属性的值可以重复D)name属性的值不可以重复21)下面是IOC自动装载方法的是()(选择两项)A)byNameB)byTypeC)constructorD)byMethod22)下面关于在Spring中配置Bean的init-method的说法正确的是()A)init-method是在最前面执行的B)init-method在构造方法后,依赖注入前执行C)init-method在依赖注入之后执行D)init-method在依赖注入之后,构造函数之前执行23)下面关于Spring配置文件说话正确的是()(选择两项)A)Spring配置文件必须叫applicationContext.xmlB)Spring配置文件可以不叫applicationContext.xmlC)Spring配置文件可以有多个D)Spring配置文件只能有一个24)看下面的代码,说法正确的是()<bean id="userTable" class="erTable"><property name="userName"><value>ACCP</value></property></bean>A)其中<property name="userName">的userName是UserTable中的属性,可以不要get、set方法。
Spring3.0 MVC 中文教程

Spring3 MVC - 3到Spring MVC框架简介Spring3 MVC框架简介Spring MVC是Spring的框架的Web组件。
它提供了丰富的功能,为建设强大的Web应用程序。
Spring MVC框架的架构,并在这样的高度可配置的方式,每一块的逻辑和功能设计。
此外Spring可以毫不费力地与其他流行的Web框架,如Struts,WebWork的,的Java Server Faces和Tapestry集成。
这意味着,你甚至可以告诉Spring使用Web框架中的任何一个。
比Spring更不紧耦合的servlet或JSP 向客户端呈现视图。
喜欢速度与其他视图技术集成,Freemarker的,Excel或PDF现在也有可能。
Spring3.0 MVC系列∙第1部分:到Spring 3.0 MVC框架简介∙第2部分:在Spring 3.0 MVC创建Hello World应用程序∙第3部分:在Spring 3.0 MVC的形式处理∙第4部分:Spring3 MVC的Tiles Support与Eclipse中的例子插件教程∙第5部分:Spring3 MVC的国际化及本地化教程与范例在Eclipse∙第6部分:Spring3 MVC示例教程Spring主题∙第7部分:创建Spring3 MVC Hibernate 3的示例在Eclipse中使用Maven的在Spring Web MVC,你可以使用任何对象作为命令或表单支持对象,你不需要实现框架特定的接口或基类。
Spring的数据绑定是高度灵活的:例如,将验证错误类型不作为应用系统错误,可以通过评估的不匹配。
因此,你不必重复你的业务对象的属性,简单的无类型的字符串,在表单对象仅仅是为了处理无效的意见,或正确转换的字符串。
相反,它往往是最好直接绑定到业务对象。
请求处理生命周期Spring的Web MVC框架是,像许多其他Web MVC框架,要求为导向,围绕一个中心的servlet,它把请求分派给控制器,提供其他功能,有利于开发Web应用而设计的。
idea搭建ssh框架的超详细教程
idea搭建ssh框架的超详细教程⽬录⼀。
创建项⽬1.new->project出现如下2.构建⽬录结构⼆。
Struts21.⾸先引⼊struts2依赖2.WEB-INF下web.xml⽂件配置3.在resources下添加struts.xml⽂件4.在action包下创建TestAction类,为了测试在webapp下新建了test.jsp页⾯5.部署6.启动测试三。
Spring1.⾸先引⼊spring相关依赖2.在web.xml中添加listener,并在resources下新建spring,xml⽂件四。
Hibernate1.引⼊hibernate依赖2.View--》Toolwindows---->Database3.编写代码⼀。
创建项⽬先附上测试的数据库DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(5) NOT NULL AUTO_INCREMENT,`name` varchar(10) COLLATE utf8_bin DEFAULT NULL,`password` varchar(10) COLLATE utf8_bin DEFAULT NULL,`remark` varchar(50) COLLATE utf8_bin DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', 'zhangsan', '123456', null);INSERT INTO `user` VALUES ('2', 'lisi', '123', null);INSERT INTO `user` VALUES ('3', 'wangan', '456', null);INSERT INTO `user` VALUES ('4', 'xinxi', '000', null);1.new->project出现如下点击next后出现如下填写GroupId和ArtifactId在点击next直⾄finish2.构建⽬录结构在main下新建java和resources⽬录如下并将java⽬录标记为Sources Root,resources标记为Resources Root在java下新建如下包package⼆。
低级sql语法错误:BadSqlGrammarException
低级sql语法错误:BadSqlGrammarExceptionat org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:760)at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:747)at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151)at com.lk.ActivemqApplication.main(ActivemqApplication.java:12)Caused by: org.springframework.jdbc.BadSqlGrammarException:### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version### The error may exist in com/lk/loms/mq/service/dao/mapper/HistoryMsgMapper.java (best guess)### The error may involve com.lk.loms.mq.service.dao.mapper.HistoryMsgMapper.insertQueueBackup-Inline### The error occurred while setting parameters### SQL: INSERT INTO queue_message_entity_bak AS SELECT queue_message_entity WHERE `insert_time` < ?### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'A ; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)at com.sun.proxy.$Proxy120.selectOne(Unknown Source)at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:166)at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:83)at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)at com.sun.proxy.$Proxy121.insertQueueBackup(Unknown Source)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at ng.reflect.Method.invoke(Method.java:498)at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)at com.sun.proxy.$Proxy123.insertQueueBackup(Unknown Source)at com.lk.BackupCommandLineRunner.insertQueueBackup(BackupCommandLineRunner.java:61)at com.lk.BackupCommandLineRunner.run(BackupCommandLineRunner.java:27)at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:776)... 6 common frames omittedCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'A at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at ng.reflect.Constructor.newInstance(Constructor.java:423)at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)at com.mysql.jdbc.Util.getInstance(Util.java:408)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)其实是很简单的, 下⾯的语句中多了个as, 不应该的.INSERT INTO queue_message_entity_bak AS SELECT queue_message_entity WHERE `insert_time` < ?本来就是简单的sql 语法错误, 还以为是⽇期格式问题, 搞了⼏个⼩时, 也是郁闷了. 原因还是不够细⼼, 没注意到 BadSqlGrammarException 这个提⽰.。
java.lang.IllegalStateException:Noprimaryorde。。。
ng.IllegalStateException:Noprimaryorde。
springboot中报错如下:springmvc也可以使⽤类似处理⽅法。
其他参考:ng.IllegalStateException: No primary or default constructor found for class java.time.LocalDateat org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:212)at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:84) at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:132)at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:124) at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:131)at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)解决⽅法:在maven添加如下依赖让框架可以处理jsr310的新⽇期、时间类<dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId><version>2.9.9</version></dependency>任意⼀个带Configuration注解的类中添加以下代码@Beanpublic Converter<String, String> StringConvert() {return new Converter<String, String>() {@Overridepublic String convert(String source) {return StringUtils.trimToNull(source);}};}@Beanpublic Converter<String, LocalDate> LocalDateConvert() {return new Converter<String, LocalDate>() {@Overridepublic LocalDate convert(String source) {if (StringUtils.isBlank(source)) {return null;}return LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd"));}};}@Beanpublic Converter<String, LocalDateTime> LocalDateTimeConvert() {return new Converter<String, LocalDateTime>() {@Overridepublic LocalDateTime convert(String source) {if (StringUtils.isBlank(source)) {return null;}return LocalDateTime.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));}};Controller⾥⾯添加注解@RequestParam(required=false)@RequestMapping(value = "/test")@ResponseBodypublic String test(@RequestParam(required = false) LocalDate startDate) {System.out.println(startDate);return "success";}。
spring框架概述
spring框架概述1 spring框架概述1.1 什么是springSpring是⼀个开源框架,Spring是于2003 年兴起的⼀个轻量级的Java 开发框架,由Rod Johnson开发。
它是为了解决企业应⽤开发的复杂性⽽创建的。
框架的主要优势之⼀就是其分层架构,分层架构允许使⽤者选择使⽤哪⼀个组件,同时为J2EE 应⽤程序开发提供集成的框架dao(JdbcTemplate) service(spring控制事务) web(springmvc)Spring的核⼼是控制反转(IoC)和⾯向切⾯(AOP)。
简单来说,Spring是⼀个分层的JavaSE/EE full-stack 轻量级开源框架。
1)IoC 和DI 2)AOP⼀句话描述spring:full-stack 轻量级开源框架分层: full-stack,每⼀个层都提供解决⽅案web层:struts,spring-MVCservice层:spring 事务控制 springdao层:hibernate,mybatis , jdbcTemplate(spring提供了⼀个模板对象) --> spring-datassh:struts2+spring+hibernate(以前的了解⼀下)ssm:spring+springmvc+mybatis(现阶段常⽤)1.2 spring核⼼Spring的核⼼是控制反转(IoC)和⾯向切⾯(AOP)1.3 spring优点1.4 spring体系结构核⼼容器:beans、core、context、expressiondao service 对象的创建交给spring2 ⼊门案例:IoC【掌握】2.1 导⼊jar包4 + 1 : 4个核⼼(beans、core、context、expression) + 1个依赖(commons-loggins...jar)2.2 ⽬标类1. 提供UserService接⼝和实现类2. 获得UserService实现类的实例之前开发中,直接new⼀个对象即可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 1、第一部分:管理对象IoC+管理依赖DI 1.1 初识Spring框架 1.1.1 什么是框架 框架:就是第三公司或个人所做的封装 框架的特点: 1. 帮助我们提高开发效率的 2. 每个框架都代表某一方面的功能, 3. 程序员不用关注框架中的具体实现,只需要了解怎么用即可
1.1.2 Spring简介
Spring官网:http://projects.spring.io/spring-framework Spring定义: spring是一个开源的轻量级的应用开发框架,其目的用于企业级应用程序开发,减少侵入(降低耦合) spring可以整合市面常见的开发框架
耦合分为三种: 零耦合 没有关系 抽象耦合 类里耦合的是接口或抽象类 集体耦合 类里耦合的是具体的实现类
1.1.3 spring框架组成 Spring官方网站提供 1. spring IOC 控制反转 2. spring DI 依赖注入 3. spring AOP spring的面向切面 4. spring 事务 spring的事务管理 5. spring jdbc spring的数据库操作 much more... 其他……. spring官方网站提供如下图 2
组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。 1.1.4 资源获取 手动下载jar包: Spring支持Jar包的下载地址:http://repo.spring.io/release/org/springframework/spring Maven下载jar包 org.springframework spring-context 4.3.7.RELEASE
1.1.5 第三方框架集成
框架 说明 1. 权限 ApacheShiro java的安全框架,认证、授权、加密、会话管理、缓存
2. 缓存 Ehcache java进程内缓存框架,快速、精干,Hibernate默认缓存
3. 缓存 redis 基于C语言编写、支持分布式内存数据库、kv数据库
4. 消息队列框架rabbit mq 对大量消息的封装,可以接收,存储和发送
5. 持久层框架Mybatis 支持SQL级别,半ORM映射框架 3
6. 定时任务Quartz 可以快速完成任务调度的工作
7. 等等很多常见框架
1.2 Spring IOC控制反转
IOC:Inversion of Control 控制反转。 控制反转,顾名思义,就是控制权的转移 即把创建(new)对象的权利,反转给第三方spring框架去创建(new) 以前: User user=new User();//由程序员控制new对象 现在: 先在spring 容器来创建对象 User user = spring容器.get对象(“容器中的唯一对象Id”);
Spring IOC案例: 1. 创建工程 工程是基础 2. 导入jar包 spring的功能支持 3. 创建类 哪个类交给spring来实例化对象 4. Spring的配置文件 spring的清单文件,指定哪些类交给spring实例化对象 5. 启动spring容器 读取清单文件并按照清单文件逐一实例化对象 6. 从spring容器中取出对象 取出并使用对象
1.2.1 创建java工程
创建lib目录 导入7个jar包 commons-logging-1.0.4.jar spring-beans-3.2.3.RELEASE.jar spring-context-3.2.3.RELEASE.jar spring-context-support-3.2.3.RELEASE.jar spring-core-3.2.3.RELEASE.jar spring-expression-3.2.3.RELEASE.jar spring-test-3.2.3.RELEASE.jar
Build Path 4
1.2.2 导入约束自动提示 找到jar包中的xsd文件
自定义xsd提示 5 浏览xsd文件,复制拼接到下面的链接中
关闭xml文件,再次打开,提示出现 6
1.2.3 创建User对象 package hello; public class User { public void sayHello(){ System.out.println("hello"); } }
1.2.4 spring配置(清单)文件,配置实例化对象的清单
配置文件的标准模板,建议从spring的官方文档获取. 注意,因为spring3版本和spring4版本的sechema文件不同,所以文件头约束写法不同(切记)
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-3.2.xsd">
1.2.5 测试类
package hello; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; 7
public class TestSpring { @Test public void test(){ //启动spring容器 ApplicationContext context = new ClassPathXmlApplicationContext("hello/applicationContext.xml"); //从spring容器中获取对象 User user = (User) context.getBean("user"); //使用user对象 user.sayHello(); } }
1.2.6 小结
在spring 的配置清单文件中配置要实例化对象的清单 由spring容器读取清单文件并逐一实例化对象 User user=spring容器.getBean(“容器中对象的唯一id”); 在java范畴中万物皆Object,在 Spring中万物皆Bean。Bean是Spring的核心、基础、根源。
1.2.7常见错误: 一般清单文件中书写错误 1. id属性唯一,不能重复,不能带有特殊字符
2.
1.3 创建过程说明 1.3.1 加载过程 启动spring容器 ApplicationContext context = new ClassPathXmlApplicationContext("hello/applicationContext.xml"); 8
1. 读取hello文件下的applicationContext.xml, 2. Xml解析applicationContext.xml文件 3. 把解析xml的内容存储到内存的Map集合中 4. 从Map集合中读取集合内容,就是清单的内容 5. 遍历集合中的所有数据,并反射实例化对象 Class.forName(“hello.User”).newInstance() 从容器中取出对象 User user=spring容器.getBean(“容器中对象的唯一id”); 使用对象 user.sayHello();
1.3.2 spring容器内部如何存这些对象呢? 根据bead的id属性getBean("user")去获取这个对象, spring初始化时把bean放入到一个map中维护,map 容器其实在spring中就是这个Map集合
1.3.3 getBean源码解析
跟踪getBean方法,找其实现类,最终可以看到bean被存放在Map中。