Java基础知识Spring讲解Word格式文档下载.docx

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

Java基础知识Spring讲解Word格式文档下载.docx

《Java基础知识Spring讲解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Java基础知识Spring讲解Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。

Java基础知识Spring讲解Word格式文档下载.docx

>

factory-method="

factory-bean="

**控制对象使用范围:

scope="

singleton或prototype"

singleton:

一个<

bean>

在容器中

只有一个对象

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.基本信息注入

字符串,数值等单个值.

propertyname="

属性"

value="

值"

**b.Bean对象注入(也可以自动装配)

ref="

id值"

**c.集合注入

List,Set,Map,Properties

**<

util:

list>

-->

set>

map>

properties>

props>

!

--**d.Spring表达式注入-->

可以将某个Bean对象或集合中的信息注入

#{id属性.属性}//调用getXXX方法

#{id属性[0]}//如果是list,set数组之类的,可以使用[1]下标

#{id属性.key}//map或properties访问,如果下标越界,就报错了

#{map["

key"

]}//Map里面存的是键值对,能取出来,但要存,在String只能是null但是可以map['

key'

]

类似EL表达式,可以在value="

引号里面,也可以在<

value>

标签里面

本质是调用get方法,所以编写bean时候,一定要写set/get方法

注入null或"

注入null,需要用到<

null/>

标签,其实我觉得不注入的话,那个属性就是null了,因为比较是

注意:

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

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

1).<

refbean="

beanID"

/>

2).<

reflocal="

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

3).ref="

属性

<

**5.组件自动扫描>

JDK5.0-->

注解技术

注解技术是在类定义中追加标记

标记格式:

@标识符

@Component

@Service

@Resoruce

标记只能出现在类的定义前,方法定义前,

成员变量定义前

注解好处:

框架一般采用注解简化或替代

原有的XML文件配置。

在类名标记>

1.指定路径

context:

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(配置)

servlet>

<

servlet-name>

springmvc<

/servlet-name>

servlet-class>

org.springframework.web.servlet.DispatcherServlet<

/servlet-class>

init-param>

<

param-name>

contextConfigLocation<

/param-name>

param-value>

classpath:

applicationContext.xml<

/param-value>

/init-param>

load-on-startup>

1<

/load-on-startup>

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

/servlet>

--转码-->

filter>

filter-name>

myfilter<

/filter-name>

filter-class>

org.springframework.web.filter.CharacterEncodingFilter<

/filter-class>

encoding<

UTF-8<

/filter>

servlet-mapping>

url-pattern>

--》HanlderMapping(配置)

hand"

org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"

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

mappings"

propkey="

/hello.do"

helloController<

/prop>

/props>

/property>

/bean>

[注释版]>

mvc:

annotation-driven/>

--》HelloController(编写+配置)

--配置controller-->

helloController"

DAO.Controller.helloController"

component-scanbase-package="

DAO"

--》ViewResolver(配置)

--配置viewresolvar-->

viewresolver"

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

p:

prefix="

/WEB-INF/"

suffix="

.jsp"

--异常处理器-->

beanclass="

org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"

exceptionMappings"

--<

异常类型"

视图名<

java.lang.Exception"

error<

--配置拦截器-->

interceptors>

interceptor>

--想栏谁-->

mappingpath="

ok.do"

--放弃拦截-->

exclude-mappingpath="

/tologin.do"

org.tarena.controller.LoginInterceptor"

/mvc:

数据库链接>

--声明定义jdbcTemplate-->

template"

org.springframework.jdbc.core.JdbcTemplate"

dataSource-ref="

dbcp"

--DataSource-->

mons.dbcp.BasicDataSource"

username="

root"

password="

driverClassName="

com.mysql.jdbc.Driver"

url="

jdbc:

mysql:

//localhost:

3306/jsd1507db"

publicclassEmpRowMapperimplementsRowMapper<

Emp>

//第一个参:

rs第二个参:

第几行记录

//将当前rs指针指向的记录取出,封装成Emp返回

EmpDao

@Repository//扫描DAO

@Resource//注入

privateJdbcTemplatetemplate;

publicvoidsave(Empemp)template.update(sql,Object[]params);

publicvoiddelete(intid)

publicvoidmodify(Empemp)

publicList<

findAll()List<

list=template.query(sql,EmpRowMapperrowMapper);

publicEmpfindByid(intid)Empemp=template.queryForObject(sql,EmpRowMapperrowMapper);

//多行查询用query()方法

//当行查询用queryForObject()方法

//单个查询用queryForInt()方法

/hello.do

--》/WEB-INF/hello.jsp(编写)

ModelAndViewmav=newModelAndView();

mav.setViewName("

//设置视图名字,根据页面名写

mav.getModel().put("

mag"

"

模型数据"

//等价于request.setAttribute("

msg"

"

@ExceptionHandler//局部异常处理

implementsHandlerExceptionResolver//将异常信息写入文件//跳转到错误界面

implementsHandlerInterceptor

//请求处理完毕输出之前afterCompletion

//Controller之后postHandle

//controller之前preHandlefalse表示拦截

--采用newGregorianCalendar(),构造方法-->

c1"

java.util.GregorianCalendar"

--采用Calendar.getInstance(),静态工厂方法-->

c2"

java.util.Calendar"

getInstance"

--采用c2.getTime(),对象工厂方法-->

date"

getTime"

e1"

lazy-init="

init-method="

init"

destroy-method="

mydestroy"

test.ExampleBeann"

q1"

test.q"

--信息注入set方法-->

cpu"

晓龙"

hdd"

索尼"

mainbord"

华硕"

p2"

test.phone"

--构造器注入-->

constructor-argindex="

0"

高<

/value>

/constructor-arg>

1"

低<

[<

DAO.MessageBean"

name="

age="

18"

birth="

2015-11-11"

friends"

<

tom<

jack<

/list>

]

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

propertiesid="

dbP"

location="

db.properties"

/util:

--定义List<

String>

对象-->

listid="

somelist"

小红<

小白<

setid="

someset"

上海<

山东<

mapid="

somemap"

entryk

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

当前位置:首页 > IT计算机 > 计算机软件及应用

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

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