【无标题】

BeanFactory和 ApplicationContext 的区别

(1)BeanFactory 是 Spring 容器中的顶层接口。

(2)ApplicationContext 是它的子接口。

(3)创建对象的时间点不一样。

ApplicationContext:只要一读取配置文件,默认情况下就会创建对象。

BeanFactory:使用的时候创建对象。

Spring框架配置:

(1)导入spring框架jar包

(2)通过ApplicationContext 接口创建spring IOC容器:

ClassPathXmlApplicationContext: 从类的根路径下加载配置文件【常用】

FileSystemXmlApplicationContext: 它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。

AnnotationConfigApplicationContext: 当使用注解配置容器对象时, 用来读取注解,使用AnnotationConfigApplicationContext配置。

bean标签的作用:用于让spring配置创建对象,默认情况下调用的类中的无参构造函数。(如果没有无参构造函数不能构造成功)

bean标签的属性:

property[性质]

id:给对象在容器中提供一个唯一标识。用于获取对象。

class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。

scope:指定对象的作用范围。

singleton :默认值,单例的

prototype :多例的.

request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中.

session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.

global session :WEB 项目中,应用在 Portlet 环境.如果没有 Portlet 环境那么 globalSession 相当于 session.

init-method:指定类中的初始化方法名称。

destroy-method:指定类中销毁方法名称

spring bean的作用域有几种?【面试题】

(1)scope="singleton" (单例对象)只创建一个对象。spring的默认作用域。 获取一个对象初始化一次

(2)scope="prototype"(多例对象) 会创建一个新的对象返回

(3) request 基于web项目的一次请求,将对象存于request域中。使用的对象都是统一的。【一次请求】

(4) session web项目中,spring创建一个bean的对象,存在session域中

(5)global session:全局作用域【Portlet 环境】,其他地方相当于session

Spring bean标签

id(唯一标识)

class(实体类)

scope(作用域:singleton【单例(一个对象时用)】、prototype【多例(多个对象时用)】)

init-method(初始化)(多例,初始化多次)

destroy-method(销毁)

init-method(初始化时指定方法初始化时的名称)【使用:在实体类中创建初始化方法,在bean里添加init-method属性,双引号里写方法名】

destroy-method(销毁)

实例化bean的三种方式【相当于创建bean(对象)】

(1)使用默认无参构造参数【默认】

(2)使用spring静态工厂的方法创建对象(实现类中的方法加static) 【创建静态工厂(java类) 在bean里的标签声明:factory-method("调用静态工厂的方法名")】

(3)使用实例工厂的方法来创建对象(实现类中的方法名不加static)【先用factory-bean标签(实例工厂的id,class写上)声明一个bean(实例工厂),在bean里的标签声明:factory-method("调用实例工厂的方法名")】

依赖注入[DI](三种方式)(建立关系 )【一个bean对象中要用到另一个bean的对象的类里的方法,】 【面试题】

service要用到dao的方法(如:public void savePerson(){personDao.save();})

(1)构造方法(构造器)注入:(在一个类(UserService)中创建另一个类(UserDao)的属性(如:private UserDao userdao;)然后在要创建的对象的类中构造好另一个类的方法:在类中右击找到Generate,然后选Constructor出另一个类(UserDao)的的构造方法。在该类的构造方法里加上另一个类的参数:public UserService(UserDao userDao【index="0"】,PersonDao personDao【index="1"】){this.userDao=userDao;this.personDao=personDao})

在主方法里声明好对象(getBean) 直接用点调出(如:userService.saveUser)

(2)set方法注入:在类里将用到的对象用setter方法set出来(在类中右击找到Generate,然后选Serter出另一个类(UserDao)的的sertter方法。)

然后在bean的property属性标签里声明好name和ref【对象名】有几个setter写几个property

(3)注解方式注入 :((支持注解的方式注入))(@Resource)注解、(@Autowired)注入

使用:在属性上加上注解,如果报错在spring.xml里bean上写和将注解支持加上

@Autowired和@Resource注解的区别?

(目标都是一致的,都是为了注入对象)

@Resource是java本身提供的

@Resource注解装配方式,先按照属性的名字去装配【byNae】,如果匹配不上再按照

Spring包扫描的机制?

(1)配置包扫描的语句,在spring.xml里添加

(2)Spring会扫描所有带有相关注解的类,创建。

(3)哪些注解:@Service @Component(组成、部件)@Repository @Controller【建议:业务层:@Service 持久层:@Repository  控制层:@Controller 其他:@Component】

工程集成spring框架:

控制层:-->servlet -->springmvc

业务层:service-->注解注入

持久层:jdbc->mybatis

pom声明版本号

1、一个servlet只能对应一个请求

(1)servlet多不易维护

(2)参数获取麻烦

servlet+jdbc

springmvc+sprng+mybatis

三层架构:

SpringMVC?

(1)model模型:模型,数据封装【entity,pojo, vo】

(2)view视图:页面 [jsp html]

(3)controller:控制器,请求处理,响应【servlet,springMVC】

springmvc的特点

1、角色划分清晰

前端控制器(DispatcherServlet)

请求到处理器映射(HanderMapping)

处理器适配器(HandlerAdapter)

视图解析器(ViewResolver)

处理器和页面控制器(Controller)

验证器(Validator)

命令对象(Command )

表单对象

2、分工明确

3、功能强大的数据验证、格式化、绑定机制

4、本地化主持解析的支持

5、强大的jsp标签库

4、SpringMvc的集成‘

(1)导入spring的核心包【在pom.xml配置】

(2)配置spring的核心控制器【在web.xml配置】

(3)springMVC注解

①@Controller加在servlet类上,声明是一个控制器

②@RequestMapping【需要配置】

jsp名字不能和servlet的名字一样,不然会优先读取servlet。

SpringMVC集成步骤:

第一步:导入spring的核心包及spring-web.jar spring-web mvc.jar的pom依赖【版本号要和前面用的spring的版本一样】

第二步:配置springMVC和核心配置器,DispatcherServlet 【在web.xml里配】

dispatcherServlet

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:conf/application-springMvc.xml

1

其中还要在conf里加上spring文件 文件名【application-springMvc.xml】

第三步:配置application-springMvc.xml的文件

【com.wojia.controller为控制层(实质还是servlet,但用注解整合成一个servlet总体,一般放在controller文件夹里)】

com.wojia.controller">

【prefix(前缀) suffix(后缀)做拼接view的jsp页面的域名用】

在页面上显示报错信息:在servlet和网页里写如下内容:

addObject添加数据

驼峰映射:数据库sql中下划线后的首字母在实体类中要大写并去掉下划线

Reformat Code:美化代码(将代码对齐缩进)

:勾选框

springMvc的改造demo:

(1)在controller文件夹里创建一个java类作为servlet类的集合,在类上加@Controller的注解,

(2)然后在调用Service用@Resource作为调用service的注解。

(3)然后在方法体里用@RequestMapping("方法体名字")

(4)然后在servlet的方法体里要用到request、response、session在servlet的方法体的括号里调用

(5)将方法体的doget、dopost等方法的内容加进去【可以一个方法一个方法写,也可以根据get和post方法来分开写写】,然后在最后转到jsp页面的语句去掉,加上return ”jsp页面的名字“;

(6)在userservlet类上头加上@RequestMapping(“user”)【路径转到为user的加上到路径的路径】

【转发】return ”jsp页面的名字“;

【重定向】return "redirect:servlet名字";

@RequestParam请求参数的映射,加载形参上,和@param类似

【运行 Artifacts里的war.exploded文件,在lib里加缺少的jar包】

400:请求参数上的错

405:路径的错

500:代码内部的错

单值传参

pojo传参

路径传参

5、SpringMvc注解?

(1)@Controller 加在类上,声明是一个控制器,springmvc可以解析【声明控制器】

(2)@RequestMapping("name") 加在类上或者方法上,是一个请求路径映射的注解【请求路径映射】【可在方法那直接写上后面的路径,放它放在类头上会给路径再分一级:相当于在原路径上再加上父路径 /name/】【为区分层级用】【也可用于实体类和参数映射】【属性:value method 】【@RequestMapping(value=“test”,method=RequestMethod.POST)请求方法GET或POST方法】

(3)@RequestParam 【加在形参上,请求参数和形参映射。】@RequestParam("value=username") String name 【参数映射 加在形参上】【请求(页面)为username,对应数据库的参数名字name】【属性:required:是否必填,默认false,defaultValue为默认值,如果不填,默认值为设定的默认值】【该参数的默认值为5:@RequestParam(defaultValue="5")】[400:参数报错]

@DateTimeFormat【时间注解】

(4)@PathVariable 加在形参上 与路径中的{}配合使用,将路径的值映射到形参上

(5)@RequestBody【加在形参上 目的是将提交过来的json的字符串转换到对应的实体类内】

(6)@ResponseBody 【可加在方法上也可加在类上 加上@ResponseBody注解返回的是具体的数据 如果不加返回是具体的数据】 【将返回的对象转换成json的形式】【需要下json的jar包】

数据传输【传参】:

单值传输

POJO类型(实体类型)传输

路径传输:【位置映射,根据位置映射】

@RequestMapping("testpath/{name}/{age}") 【参数为动态,加花括号的为动态的 能自动匹配】

public String testpath(@PathVariable("name") String name,@PathVariable("age") Integer age){

System.out.println(name+age);

return "sucess";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值