Java基础知识Spring.docx

上传人:b****5 文档编号:30155291 上传时间:2023-08-05 格式:DOCX 页数:17 大小:21.88KB
下载 相关 举报
Java基础知识Spring.docx_第1页
第1页 / 共17页
Java基础知识Spring.docx_第2页
第2页 / 共17页
Java基础知识Spring.docx_第3页
第3页 / 共17页
Java基础知识Spring.docx_第4页
第4页 / 共17页
Java基础知识Spring.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

Java基础知识Spring.docx

《Java基础知识Spring.docx》由会员分享,可在线阅读,更多相关《Java基础知识Spring.docx(17页珍藏版)》请在冰豆网上搜索。

Java基础知识Spring.docx

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,需要用到标签,其实我觉得不注入的话,那个属性就是null了,因为比较是

注意:

1.上面的值,能不能替换成对象,替换成bean

2.注入参数时候,如果需要引用其他bean最好少用ref属性和value属性被,最好使用标签

1).

2).两个bean必须在同一个文件夹,不然就报异常

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

springmvc

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:

applicationContext.xml

1

//加上为启动服务器时,实例化,不加为第一次请求时实例化

--转码-->

myfilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

--》HanlderMapping(配置)

--指定请求和controller对应关系-->

helloController

[注释版]>

annotation-driven/>

--》HelloController(编写+配置)

--配置controller-->

[注释版]>

component-scanbase-package="DAO"/>

--》ViewResolver(配置)

--配置viewresolvar-->

class="org.springframework.web.servlet.view.InternalResourceViewResolver"

p:

prefix="/WEB-INF/"p:

suffix=".jsp">

--异常处理器-->

--视图名-->

error

--配置拦截器-->

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)

publicListfindAll()Listlist=template.query(sql,EmpRowMapperrowMapper);

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">

tom

jack

]

[

--读取db.properties文件,形成一个properties对象-->

propertiesid="dbP"

location="classpath:

db.properties">

properties>

--定义List对象-->

listid="somelist">

小红

小白

list>

setid="someset">

上海

山东

set>

mapid="somemap">

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1