Java框架SpringIOC笔记.docx
- 文档编号:28633251
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:19
- 大小:21.02KB
Java框架SpringIOC笔记.docx
《Java框架SpringIOC笔记.docx》由会员分享,可在线阅读,更多相关《Java框架SpringIOC笔记.docx(19页珍藏版)》请在冰豆网上搜索。
Java框架SpringIOC笔记
Day01:
梁建全:
liangjq@
=================
1.框架学习
a.框架有什么作用,能帮我们做什么
b.帮我做了哪些事,需要我们配合做哪些事
c.熟悉框架的设计思想,至于如何实现
以后再去考虑
d.练习时多练习几遍,掌握开发主要步骤
======Spring框架========
1.Spring框架作用
*a.SpringCore(IOC功能)
b.SpringAOP功能
(管理组件对象,维护对象关系,目的:
降低组件耦合度)
c.SpringWebMVC功能
(MVC设计,
目的:
架构一个MVC结构的Web程序)
d.Spring整合其他技术,例如JDBC,MyBatis,Hibernate,Struts等
Spring-->整合API-->调用原有技术API
在Spring中使用整合API编程
Spring-->JdbcTemplate-->Connection,StatemenJdbcTemplate.update(sql,params);
请求-->Servlet-->Service-->多个Dao-》JSP
EmpService
EmpDaodao=newEmpDao();
dao.save();
2.SpringIOC应用
a.管理对象
创建、初始化、释放资源、销毁
b.维护对象关系
采用注入方式建立对象关系.
DependencyInjection(DI)依赖注入
依赖注入:
set方法注入,构造器注入
c.搭建SpringIOC开发环境
--引入相关jar包
--在src添加applicationContext.xml
ApplicationContext容器对象
-->applicationContext.xml-->
List-->存取对象的集合
a.创建List对象
b.往List添加对象元素
c.从List取对象元素
Spring容器-->管理组件及对象关系
a.创建ApplicationContext对象
b.向applicationContext.xml配置
c.利用ApplicationContext对象getBean()
2.Spring创建Bean对象的控制
*a.控制对象创建方式(使用范围)
在
scope可以支持singleton或prototype
默认值是singleton
容器里只有一个bean对象
ac.getBean("id");都返回一个新的对象.
b.指定对象初始化方法
利用
当创建对象后自动执行init-method方法
c.指定对象销毁方法
利用
满足下面条件才有效
--组件对象为单例模式
--调用AbstractApplicationContext容器
对象的close()方法
d.控制单例对象创建时机
在默认情况下,单例对象是Spring容器创建时实例化;可以使用
lazy-init=true属性将创建时机推迟到
getBean()方法调用时.
IOC概念:
InversionofControl控制反转或反向控制
控制反转:
改变了对象获取方式.之前编码方式采用new构造器方式获取对象;ioc中
采用由容器创建对象之后注入进来使用。
只要修改配置就可以改变对象关系
Day02:
1.自动注入
用于指定自动注入规则.可以使用byType,byName,constructor等.用于简化注入配置.
使用byType类型匹配注入需要注意,有2个及其以上匹配会出异常。
2.各种类型信息的注入配置格式
*a.注入字符串,数值单个数值
*b.注入bean对象
c.注入集合*list,set,map,*properties
d.spring表达式注入
#{表达式}
#{id名.属性}或#{id名.key}
如果是对象属性,需要有getXXX方法
3.利用注解配置应用IOC
在JDK5.0时追加一些新特性
List
for(Strings:
list)
Integeri=10;
注解:
在类定义,方法定义,成员变量定义前面使用,格式为@注解标记名
publicvoidf1(String..s)
a.组件自动扫描
可以按指定的包路径,将包下所有组件扫描,如果发现组件类定义前有以下标记,
会将组件扫描到Spring容器.
@Component//其他组件
@Controller//控制层组件
@Service//业务层组件xxxService
@Repository//数据访问层组件xxxDao
@Named(需要引入第三方标准包)
@Scope控制对象创建.默认单例
@PostConstruct指定init-method
@PreDestroy指定destroy-method
b.注入注解
@Resource:
可以在变量定义前或setXX方法前应用
@Autowired:
可以在变量定义前或setXX方法前应用
一般使用时,功能等价,都可以实现注入。
如果不存在多个匹配类型,使用@Resource
或@Autowired都可以。
如果存在多个匹配类型,建议按名称注入
@Resource(name="指定名称")或
@Autowired
@Qualifier("p")
如果指定名称注入,不会再按类型匹配注入。
Day03:
listid=""> setid=""> mapid=""> propertiesid=""> #{bean对象id.属性}-->属性getXXX #{map对象id.key} #{map对象id['key']} #{List对象id[0]} @Resource(name="xxx")//强制按名称 @Autowired @Qulifier("xxx")//强制按名称 @ResourcesetXxx @AutowiredsetXxx(Stringxx) 使用建议: set注入建议用@Resource构造器建议用Autowired SpringIOC应用: 自己编写的组件建议使用注解配置;框架API只能用XML配置 IOC: 以注入方式应用对象,实现组件解耦 =========SpringWebMVC========== SpringWebMVC需要使用IOC功能。 用于开发MVC结构的Web程序。 1.MVC思想 将程序组件分为模型,视图,控制器三部分。 2.Spring如何实现MVC *3.SpringWebMVC处理流程 案例: hello示例 /hello.do--springwebmvc-->/WEB-INF/hello.jsp /hello.do -->DispatcherServlet(配置) -->HanlderMapping(配置) -->HelloController(编写+配置) -->ViewResolver(配置) -->/WEB-INF/hello.jsp(编写) a.搭建SpringWebMVC开发环境 --引入ioc,webmvc开发包 --src下添加applicationContext.xml b.编写HelloController实现规则: 实现Controller接口 ==================== 2.显示登录页面 /tologin.do -->DispatcherServlet -->handlermappping -->ToLoginController -->ViewResolver -->/WEB-INF/login.jsp 3.单击登录按钮处理 /login.do(提交表单) -->DispatcherServlet -->handlermapping -->LoginController (获取提交的用户名和密码,如果用户名为root,密码为1234认为正确,否则错误) -->ViewResolver -->错误进入/WEB-INF/login.jsp 正确进入/WEB-INF/ok.jsp Day04: ======SpringWebMVC注解应用======= a.RequestMappingHanlderMapping组件 @RequestMapping("/login.do") 该标记用在Controller业务方法前 b.Controller编写和配置 取消了实现Controller接口及方法约定 可以允许程序员按需要灵活定义业务方法 publicModelAndView或String 方法名(根据需要定义request,session,response) (Controller需要扫描到Spring容器,必须使用@Controller) /hello.do -->DispatcherServlet -->HandlerMapping -->HelloController -->ViewResolver -->hello.jsp //进入登录页面 /tologin.do -->DispatcherServlet -->Handlermapping -->LoginController.toLogin -->ViewResolver -->login.jsp /login.do -->DispatcherServlet -->Handlermapping -->LoginController.checkLogin -->ViewResolver -->错误login.jsp/正确ok.jsp ======================== 1.Controller如何接收请求参数 a.利用HttpServletRequest *b.利用业务方法参数 --方法参数名与请求参数key保持一致 --利用@RequestParam("key") *c.利用实体对象当方法参数 使用建议: 少量参数使用b;大量参数使用c 如果客户端表单数据没有格式检查, 遇到非字符串类型参数建议使用a 2.Controller如何向响应JSP传值 *a.利用HttpServletRequest b.利用ModelAndView做返回值 *c.利用ModelMap方法参数 d.使用@ModelAttribute("key") publicStringcheckLogin( @ModelAttribute("user")Stringusername){ return"ok";//ok.jsp使用${user} } @ModelAttribute("user") publicStringgetName(){ return"tom"; } model.put("user",getName());//${user} 3.Controller如何使用Session publicStringcheckLogin( HttpServletRequestrequest){ HttpSessionsession=request.getSession(); session.setAttribute(key,value); } publicStringcheckLogin( HttpSessionsession){ session.setAttribute(key,value); } ======================== 案例: 列表显示功能 /list.do -->DispatcherServlet -->Handlermapping -->ListController (构建一个List -->ViewResolver -->/WEB-INF/list.jsp(JSTL foreach>) List for(inti=0;i<10;i++){ Useruser=newUser(); user.setUsername("tom"+i); user.setPassword("1234"+i); list.add(user); } Day05: 1.任务: 实现登录功能 采用技术: SpringMVC,SpringIOC,dbcp连接池 SpringMVC: 快速构建MVC结构的程序利用它实现接收请求分发处理的控制 SpringIOC: 管理程序Controller,Dao组件实现解耦 dbcp: 用于管理connection连接 可以控制连接数; 可以避免频繁创建和释放连接 ============================ a.搭建开发环境 --jar包 --xml配置文件src/applicationContext.xml b.设计请求--响应处理流程 /login.do -->DispatcherServlet(配置) -->HanlderMapping(配置) -->LoginController.checkLogin(编写+配置) -->UserDao(编写+配置) -->DataSource(dbcp)(配置) -->user表(查询) -->ViewResolver(配置) -->ok.jsp/login.jsp(编写) c.实现UserDao --实体类 --UserDao接口及其实现 --配置UserDao-->DataSource --测试 d.实现LoginController --编写实现 --配置Controller --测试 e.配置MVC处理 --配置DispatcherServlet --配置HanlderMapping --配置ViewResolver d.JSP实现 请求-->Filter-->Servlet-->Controller ========================== 2.中文POST提交乱码问题 a.Controller接收乱码 解决方法: web.xml配置CharacterEncodingFilter b.写入数据库乱码 解决方法: url连接字符串,添加 xxx? useUnicode=true&characterEncoding=utf8 c.查看建表语句,设置建表编码 showcreatetablexxx;//查看 createtablexxx... defaultcharset=utf8; 3.MVC异常处理 *a.全局异常处理 所有Controller异常都可以交给 SimpleMappingExceptionResolver *b.局部异常处理 处理某一个Controller异常 在Controller中定义下面方法 @ExceptionHanlder publicStringxxx( HttpServletRequestrequest, Exceptionex){ //异常处理逻辑 return"异常页面名"; } Day06: 1.Spring与JDBC整合应用 a.提供了编写DAO的工具类 JdbcTemplate JdbcTemplate.update("insert..",参数); JdbcTemplate.query(); JdbcTemplate.queryForObject(); selectcount(*)fromemp introws=JdbcTemplate.queryForInt(); b.提供了AOP式事务管理 (不需要在方法中追加事务提交和回滚) c.提供了统一的异常处理 DataAccessException 2.Spring整合JDBC步骤 a.搭建spring+jdbc开发环境 引入spring(ioc,aop,dao)开发包 添加src/applicationContext.xml 数据库驱动,dbcp连接池 *b.编写实体类Emp *c.编写EmpDAO组件 *d.在applicationContext.xml中 扫描EmpDAO,注入JdbcTemplate对象 DBCP( -->EmpDao(扫描) =======单独使用JDBC======= a.引入驱动包 b.编写DBUtil c.编写实体类Emp d.编写EmpDao ========================== createtablecost( cost_idintprimarykey, namevarchar(50)notnull, base_durationlong, base_costdouble, unit_costdouble, statuschar (1), descrvarchar(100), creatimedate, startimedate, cost_typechar (1) ); INSERTINTOCOSTVALUES(1,'5.9元套餐',20,5.9,0.4,0,'5.9元20小时/月,超出部分0.4元/时',DEFAULT,DEFAULT,NULL); INSERTINTOCOSTVALUES(2,'6.9元套餐',40,6.9,0.3,0,'6.9元40小时/月,超出部分0.3元/时',DEFAULT,DEFAULT,NULL); INSERTINTOCOSTVALUES(3,'8.5元套餐',100,8.5,0.2,0,'8.5元100小时/月,超出部分0.2元/时',DEFAULT,DEFAULT,NULL); INSERTINTOCOSTVALUES(4,'10.5元套餐',200,10.5,0.1,0,'10.5元200小时/月,超出部分0.1元/时',DEFAULT,DEFAULT,NULL); INSERTINTOCOSTVALUES(5,'计时收费',null,null,0.5,0,'0.5元/时,不使用不收费',DEFAULT,DEFAULT,NULL); INSERTINTOCOSTVALUES(6,'包月',null,20,null,0,'每月20元,不限制使用时间',DEFAULT,DEFAULT,NULL); INSERTINTOCOSTVALUES(7,'mm',10,5,null,0,'',DEFAULT,DEFAULT,NULL); INSERTINTOCOSTVALUES(8,'nn',10,7,null,0,'',DEFAULT,DEFAULT,NULL); INSERTINTOCOSTVALUES(9,'qq',10,4,null,0,'',DEFAULT,DEFAULT,NULL); COMMIT; Day07: ======MyBatis框架========= 1.MyBatis简介 MyBatis-->iBatis MyBatis: 封装了JDBC应用,简化了JDBC编程。 --封装了连接获取,生成statement, 执行sql,释放连接过程 --封装了将查询结果转换成实体对象 (需要字段名和实体属性名对应) --封装了实体对象参数跟SQL中? 映射过程 insertintouser(username,pwd,name) values(#{属性名},#{属性名},#{属性名}) --封装了根据Mapper接口(Dao)生成实现组件过程 使用MyBatis开发者只需要做一下工作 --搭建MyBatis开发环境 --编写SQL语句 --编写Mapper接口 --使用SqlSession对象触发增删改查操作 2.MyBatis使用 createtablecost( cost_idintprimarykeyauto_increment, namevarchar(50)notnull, base_durationlong, base_costdouble, unit_costdouble, statuschar (1), descrvarchar(100), creatimedate, startimedate, cost_typechar (1) )defaultcharset=utf8; a.搭建Mybatis开发环境 --引入mybatis.jar和数据库驱动包 --src下添加主配置文件SqlMapConfig.xml b.获取SqlSession对象资源 c.对表做操作 --编写实体类 --定义SQL语句 --利用SqlSession操作SQL selectcost_id,name fromcostwherecost_id=1; d.Mapper映射器接口(规范) --方法名与SQL定义的id属性一致 --方法参数类型与SQl定义的parameterType属性一致 --方法返回类型参考SQL定义的resultType --在SQL定义文件的 namespace指定对应的接口类型
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 框架 SpringIOC 笔记