Java基础知识Spring.docx
- 文档编号:30155291
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:17
- 大小:21.88KB
Java基础知识Spring.docx
《Java基础知识Spring.docx》由会员分享,可在线阅读,更多相关《Java基础知识Spring.docx(17页珍藏版)》请在冰豆网上搜索。
Java基础知识Spring
====================框架==================
框架是基于很多技术,思想形成。
重点:
了解框架作用,什么时候用,怎么用
掌握:
帮我做了什么事,需要我们配合做哪些事
了解:
框架涉及技术和思想,如何实现以后考虑
多练习,掌握开发步骤
==============Spring============
1.了解Spring框架作用
Spring框架可以改善系统结构,提高系统灵活性.
--Spring提供了IOC和AOP机制,
可以降低程序组件之间的耦合度
--Spring提供了SpringWebMVC实现
可以快速开发MVC结构的Web程序
[MVC是一种设计模式
M----model(业务逻辑和业务数据)javabean
V----view(显示逻辑)html和jsp
C----controller(控制器)servlet]
--Spring提供了对JDBC,MyBatis,Hibernate,
Struts等其他技术的整合应用高内聚低耦合
Sping-->整合API-->调用原有技术API在Spring中使用整合API编程
Spring-->JdbcTemplate-->Connection,statement-->JdbcTemplate.update(sql,params);
请求---->Servlet--->Service---->多个Dao---->JSP
2.什么时候用
**降低程序组件耦合度
*WebMVC结构程序
3.怎么使用Spring
1)Spring容器IOC应用(Core核心)
a.创建组件对象
容器类型:
ApplicationContext和BeanFactory
容器对象创建:
ClassPathXmlApplicationContext
组件定义方法,有3种
**控制对象使用范围:
scope="singleton或prototype"
singleton:
一个
只有一个对象
prototype:
一个
getBean都会产生一个新对象
指定初始化和销毁方法:
init-method和destroy-method属性
init-method:
在对象创建后,自动调用
指定的初始化方法
destroy-method:
仅对scope="singleton"
组件有效,在调用容器close方法
销毁时触发
指定Bean对象延迟实例化
单例组件,在Spring容器实例时自动
实例化;可以采用lazy-init="true"
将对象创建推迟到getBean()方法调用
b.维护组件对象关系(IOC思想)
IOC概念:
InversionofController
反向控制/控制反转
本质:
改变了对象获取方式,由原有
自己创建对象应用,转为接收外界注入的
对象使用。
由spring容器负责对象创建,
以及关系注入的控制。
Spring的IOC主要采用DI技术实现关系注入
DepedencyInjection依赖注入,
Spring的DI又分为set注入,构造器注入
**set注入应用
手机组件:
TelePhone
属性:
cup,ram
4.各种类型信息的注入
**a.基本信息注入
字符串,数值等单个值.
**b.Bean对象注入(也可以自动装配)
**c.集合注入
List,Set,Map,Properties
** list>--> set>--> map>--> ** properties>--> --**d.Spring表达式注入--> 可以将某个Bean对象或集合中的信息注入 #{id属性.属性}//调用getXXX方法 #{id属性[0]}//如果是list,set数组之类的,可以使用[1]下标 #{id属性.key}//map或properties访问,如果下标越界,就报错了 #{map["key"]}//Map里面存的是键值对,能取出来,但要存,在String只能是null但是可以map['key'] 类似EL表达式,可以在value=""引号里面,也可以在 本质是调用get方法,所以编写bean时候,一定要写set/get方法 注入null或"" 注入null,需要用到 注意: 1.上面的值,能不能替换成对象,替换成bean 2.注入参数时候,如果需要引用其他bean最好少用ref属性和value属性被,最好使用标签 1). 2). 3).ref=""属性 **5.组件自动扫描> JDK5.0-->注解技术 注解技术是在类定义中追加标记 标记格式: @标识符 @Component @Service @Resoruce 标记只能出现在类的定义前,方法定义前, 成员变量定义前 注解好处: 框架一般采用注解简化或替代 原有的XML文件配置。 在类名标记> 1.指定路径 component-scanbase-package: "包名"/> 有时候需要一个统一的包名,不同的包需要被包在一个包里面,所以域名反写的规则最好遵守 组件自动扫描使用: 可以简化 包内所有组件,如果组件类定义前出现以下 几个标记之一,就将组件声明定义到容器. @Component//组件通用注解 @Controller//控制组件xxxController @Service//业务组件xxxService @Repository//数据访问组件xxxDAO @Named//需要引入第三方标准jar包 bean的命名 1).默认id什么都不写,那么就是小写开头的类名 2).自定义在注解后面("名字") 指定组件作用域 @Scope("作用域")默认单例的singleton: 一个 指定初始化和销毁方法> @PostConstruct指定init-method 被这个标记的方法,会被作为初始化方法,实例化时候自动调用 @PreDestroy指定destroy-method 被被标记的方法,会在容器关闭,销毁对象时候调用 注意: 如果定义了全局的默认的初始化,销毁方法,也是以这个为优先的---------------------很少使用 @注入注解(在属性或setter方法上标记)> @Resource: 会自动装配,并且按照先按name,后type的匹配方式注入如果怕发生错误,可以指定name或type(name="bean名")(type=User.class) --可以在变量定义前或setXX方法前应用--> @Autowired/@Qualifier: 默认使用type匹配注入可以使用另一个注解@Qualifier("bean名字")指定bean名 注意: 可以省略掉set方法 都可以写在属性定义,或者setter方法上面 如果写了name,就不会再去找type匹配了 如果指定名称注入,不会再按类型匹配注入。 ==================> 1.SpringMVC工作流程(理论) a.浏览器发出一个HTTP请求 b.请求首先进入DispatcherServlet 主控制器 c.主控制器调用HandlerMapping组件 根据请求找映射的Controller处理 d.执行Controller处理方法,将返回 结果给ViewResolver组件 e.ViewResolver组件根据Cotroller返回 结果定位视图JSP,将模型数据传递给JSP f.由JSP生成响应结果,给浏览器输出 2.SpringMVC开发过程(应用) a.搭建SpringMVC开发环境 b.流程设计 请求(变化) -->DispatcherServlet(固定) -->HandlerMapping(固定) -->Controller组件(变化) -->ViewResolver(固定) -->JSP组件(变化) c.编写JSP,Controller组件 d.配置处理流程 request.setCharacterEncoding("utf-8"); 3.-如何接收请求参数(应用) 方法参数(参数名字与请求key保持一致) 方法参数(实体对象,实体属性与key保持一致) -如何向页面传值 添加ModelMap方法参数 -如何使用session 添加HttpSession方法参数 =========================> /list.do -->DispatcherServlet -->HandlerMapping -->ListController -->ViewResolver -->/WEB-INF/list.jsp ===================== 4.如何解决中文接收乱码问题 CharacterEncodingFilter(Spring-web.jar提供) 5.如何处理异常 *a.全局异常处理 SimpleMappingExceptionResolver *b.局部异常处理 @ExceptionHandler publicStringxxx( HttpServletRequestrequest,Exceptionex) c.自定义ExceptionResolver HandlerExceptionResolver 6.如何实现登录权限检查 使用session进行约定值判断。 实现方法: 1.采用Filter;2.采用拦截器 a.拦截器组件简介 拦截器组件是SpringMVC特有组件。 拦截器组件可以在Controller之前拦截; 也可以在Controller之后拦截; 还可以在JSP解析完毕给浏览器输出之前 拦截。 b.拦截器使用方法 首先编写一个拦截器组件(实现handlerInterceptor接口) 在约定方法中添加要插入的逻辑 然后在applicationContext.xml中配置 ======================> sessionScopu.session直接从session找 spring-webmvc-3.2.8.RELEASE.jar web.xml org.springframework.web.servlet.DispatcherServlet applicationContext.xml org.springframework.web.servlet.handler.SimpleUrlHandlerMapping -->DispaticherServlet(配置) web.xml applicationContext.xml //加上为启动服务器时,实例化,不加为第一次请求时实例化 --转码--> --》HanlderMapping(配置) --指定请求和controller对应关系--> [注释版]> annotation-driven/> --》HelloController(编写+配置) --配置controller--> [注释版]> component-scanbase-package="DAO"/> --》ViewResolver(配置) --配置viewresolvar--> class="org.springframework.web.servlet.view.InternalResourceViewResolver" p: prefix="/WEB-INF/"p: suffix=".jsp"> --异常处理器--> -- --配置拦截器--> interceptors> interceptor> --想栏谁--> mappingpath="ok.do"/> --放弃拦截--> exclude-mappingpath="/tologin.do"/> interceptor> interceptors> 数据库链接> --声明定义jdbcTemplate--> p: dataSource-ref="dbcp"> --DataSource--> p: username="root"p: password=""p: driverClassName="com.mysql.jdbc.Driver" p: url="jdbc: mysql: //localhost: 3306/jsd1507db"> publicclassEmpRowMapperimplementsRowMapper rs第二个参: 第几行记录 //将当前rs指针指向的记录取出,封装成Emp返回 EmpDao @Repository//扫描DAO @Resource//注入 privateJdbcTemplatetemplate; publicvoidsave(Empemp)template.update(sql,Object[]params); publicvoiddelete(intid) publicvoidmodify(Empemp) publicList publicEmpfindByid(intid)Empemp=template.queryForObject(sql,EmpRowMapperrowMapper); //多行查询用query()方法 //当行查询用queryForObject()方法 //单个查询用queryForInt()方法 /hello.do -->DispaticherServlet(配置) --》HanlderMapping(配置) --》HelloController(编写+配置) --》ViewResolver(配置) --》/WEB-INF/hello.jsp(编写) ModelAndViewmav=newModelAndView(); mav.setViewName("");//设置视图名字,根据页面名写 mav.getModel().put("mag","模型数据"); //等价于request.setAttribute("msg","模型数据"); @ExceptionHandler//局部异常处理 implementsHandlerExceptionResolver//将异常信息写入文件//跳转到错误界面 implementsHandlerInterceptor //请求处理完毕输出之前afterCompletion //Controller之后postHandle //controller之前preHandlefalse表示拦截 --采用newGregorianCalendar(),构造方法--> --采用Calendar.getInstance(),静态工厂方法--> factory-method="getInstance"> --采用c2.getTime(),对象工厂方法--> factory-method="getTime"> init-method="init"destroy-method="mydestroy" class="test.ExampleBeann"> --信息注入set方法--> --构造器注入--> [ p: name="root"p: age="18"p: birth="2015-11-11"> ] [ --读取db.properties文件,形成一个properties对象--> propertiesid="dbP" location="classpath: db.properties"> properties> --定义List listid="somelist"> list> setid="someset"> set> mapid="somemap">
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 基础知识 Spring