收藏 分销(赏)

Java基础知识Spring.doc

上传人:精*** 文档编号:9702444 上传时间:2025-04-03 格式:DOC 页数:11 大小:39.50KB 下载积分:8 金币
下载 相关
Java基础知识Spring.doc_第1页
第1页 / 共11页
Java基础知识Spring.doc_第2页
第2页 / 共11页


点击查看更多>>
资源描述
Java基础知识Spring ====================框架================== 框架是基于很多技术,思想形成。 重点: 了解框架作用,什么时候用,怎么用 掌握: 帮我做了什么事,需要我们配合做哪些事 了解: 框架涉及技术和思想,如何实现以后考虑 多练习,掌握开发步骤 ==============Spring============ 1.了解Spring框架作用 Spring框架可以改善系统结构,提高系统灵活性. --Spring提供了IOC和AOP机制, 可以降低程序组件之间的耦合度 --Spring提供了Spring Web MVC实现 可以快速开发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.什么时候用 **降低程序组件耦合度 *Web MVC结构程序 3.怎么使用Spring 1) Spring容器IOC应用(Core核心) a.创建组件对象 容器类型: ApplicationContext和BeanFactory 容器对象创建:ClassPathXmlApplicationContext 组件定义方法,有3种 <bean id="" class=""> <bean id="" class="" factory-method=""> <bean id="" factory-bean="" factory-method=""> **控制对象使用范围: scope="singleton或prototype" singleton:一个<bean>,在容器中 只有一个对象 prototype:一个<bean>,每次调用 getBean都会产生一个新对象 指定初始化和销毁方法: init-method和destroy-method属性 init-method:在对象创建后,自动调用 指定的初始化方法 destroy-method:仅对scope="singleton" 组件有效,在调用容器close方法 销毁时触发 指定Bean对象延迟实例化 单例组件,在Spring容器实例时自动 实例化;可以采用lazy-init="true" 将对象创建推迟到getBean()方法调用 b.维护组件对象关系(IOC思想) IOC概念:Inversion of Controller 反向控制/控制反转 本质:改变了对象获取方式,由原有 自己创建对象应用,转为接收外界注入的 对象使用。由spring容器负责对象创建, 以及关系注入的控制。 Spring的IOC主要采用DI技术实现关系注入 Depedency Injection 依赖注入, Spring的DI又分为set注入,构造器注入 **set注入应用 手机组件:TelePhone 属性:cup,ram 4.各种类型信息的注入 **a.基本信息注入 字符串,数值等单个值. <property name="属性" value="值"> **b.Bean对象注入(也可以自动装配) <property name="属性" ref="id值"> **c.集合注入 List,Set,Map,Properties **<util:list> --> <list> <util:set> --> <set> <util:map> --> <map> **<util: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).<ref bean="beanID"/> 2).<ref local="beanID"/> 两个bean必须在同一个文件夹,不然就报异常 3).ref="" 属性 <!**5.组件自动扫描> JDK5.0 --> 注解技术 注解技术是在类定义中追加标记 标记格式:@标识符 @Component @Service @Resoruce 标记只能出现在类的定义前,方法定义前, 成员变量定义前 注解好处:框架一般采用注解简化或替代 原有的XML文件配置。 <!在类名标记> 1.指定路径 <context:component-scan base-package:"包名"/> 有时候需要一个统一的包名,不同的包需要被包在一个包里面,所以域名反写的规则最好遵守 组件自动扫描使用: 可以简化<bean>定义,按指定的包路径扫描 包内所有组件,如果组件类定义前出现以下 几个标记之一,就将组件声明定义到容器. @Component //组件 通用注解 @Controller //控制组件xxxController @Service //业务组件xxxService @Repository //数据访问组件xxxDAO @Named //需要引入第三方标准jar包 bean的命名 1).默认id 什么都不写,那么就是小写开头的类名 2).自定义 在注解后面("名字") 指定组件作用域 @Scope("作用域") 默认 单例的 singleton:一个<bean>,在容器中只有一个对象 <!指定初始化和销毁方法> @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 public String xxx( HttpServletRequest request,Exception ex) 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 <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> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <servlet-mapping> <filter-name> <url-pattern> --》HanlderMapping(配置) <bean id="hand" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <!-- 指定请求和controller对应关系 --> <property name="mappings"> <props> <prop key="/hello.do">helloController</prop> </props> </property> </bean> <![注释版]><mvc:annotation-driven /> --》HelloController(编写+配置) <!-- 配置controller --> <bean id="helloController" class="DAO.Controller.helloController"></bean> <![注释版]><context:component-scan base-package="DAO"/> --》ViewResolver(配置) <!-- 配置viewresolvar --> <bean id="viewresolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/" p:suffix=".jsp"> </bean> <!-- 异常处理器 --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <!-- <prop key="异常类型">视图名</prop> --> <prop key="java.lang.Exception">error</prop> </props> </property> </bean> <!-- 配置拦截器 --> <mvc:interceptors> <mvc:interceptor> <!-- 想栏谁 --> <mvc:mapping path="ok.do"/> <!--放弃拦截--> <mvc:exclude-mapping path="/tologin.do"/> <bean class="org.tarena.controller.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> <!数据库链接> <!-- 声明定义jdbcTemplate --> <bean id="template" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dbcp"> </bean> <!-- DataSource --> <bean id="dbcp" class="mons.dbcp.BasicDataSource" p:username="root" p:password="" p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/jsd1507db"> </bean> public class EmpRowMapper implements RowMapper<Emp>//第一个参:rs 第二个参:第几行记录 //将当前rs指针指向的记录取出,封装成Emp返回 EmpDao @Repository //扫描DAO @Resource //注入 private JdbcTemplate template; public void save(Emp emp) template.update(sql,Object[] params); public void delete(int id) public void modify(Emp emp) public List<Emp> findAll() List<Emp> list=template.query(sql, EmpRowMapper rowMapper); public Emp findByid(int id) Emp emp=template.queryForObject(sql, EmpRowMapper rowMapper); //多行查询用query()方法 //当行查询用queryForObject()方法 //单个查询用queryForInt()方法 /hello.do -->DispaticherServlet(配置) --》HanlderMapping(配置) --》HelloController(编写+配置) --》ViewResolver(配置) --》/WEB-INF/hello.jsp(编写) ModelAndView mav=new ModelAndView(); mav.setViewName("");//设置视图名字,根据页面名写 mav.getModel().put("mag", "模型数据"); //等价于request.setAttribute("msg","模型数据"); @ExceptionHandler//局部异常处理 implements HandlerExceptionResolver //将异常信息写入文件 //跳转到错误界面 implements HandlerInterceptor //请求处理完毕 输出之前 afterCompletion //Controller之后 postHandle //controller之前 preHandle false表示拦截 <!-- 采用 new GregorianCalendar() ,构造方法--> <bean id="c1" class="java.util.GregorianCalendar"></bean> <!-- 采用Calendar.getInstance(),静态工厂方法 --> <bean id="c2" class="java.util.Calendar" factory-method="getInstance"></bean> <!-- 采用c2.getTime(),对象工厂方法 --> <bean id="date" factory-bean="c2" factory-method="getTime"></bean> <bean id="e1" scope="singleton" lazy-init="true" init-method="init" destroy-method="mydestroy" class="test.ExampleBeann"></bean> <bean id="q1" class="test.q"> <!-- 信息注入 set方法--> <property name="cpu" value="晓龙"> </property> <property name="hdd" value="索尼"> </property> <property name="mainbord" value="华硕"> </property> </bean> <bean id="p2" class="test.phone"> <!-- 构造器注入 --> <constructor-arg index="0"> <value>高</value> </constructor-arg> <constructor-arg index="1"> <value>低</value> </constructor-arg> </bean> [<bean id="msg" class="DAO.MessageBean" p:name="root" p:age="18" p:birth="2015-11-11"> <property name="friends"> <list> <value>tom</value> <null/> <value>jack</value> </list> </property> </bean> ] [<!-- 读取db.properties文件,形成一个properties对象 --> <util:properties id="dbP" location="classpath:db.properties"> </util:properties> <!-- 定义List<String>对象 --> <util:list id="somelist"> <value>小红</value> <value>小白</value> </util:list> <util:set id="someset"> <value>上海</value> <value>山东</value> </util:set> <util:map id="somemap"> <entry key="1003" value="java精通"></entry> <entry key="1004" value="java掌握"></entry> </util:map> <util:properties id="somedb"> <prop key="username">#{dbP.user}</prop> <prop key="password">#{dbP.password}</prop> <prop key="driver">#{dbP.driver}</prop> </util:properties> <bean id="msg1" class="DAO.MessageBean" p:name="#{msg.name}" p:friends-ref="somelist" p:cities-ref="someset" p:books-ref="somemap" p:db-ref="somedb"> </bean> ] <!--db.properties--> [#key=value user=root password=12345 driver=com.mysql.jdbc.Driver uri=jdbc:mysql://localhost:3306/test ] <!--遍历Map的两种方法--> [ System.out.println("Map----注入信息----"); Set<Entry<String,String>> booksSet=books.entrySet();//将map转换为set类型 for(Entry<String,String> e:booksSet){ System.out.println(e.getKey()+","+e.getValue()); } System.out.println("Map----注入信息----"); Set<Object> keys=db.keySet(); for(Object key:keys){ System.out.println(key+","+db.getProperty(key.toString())); } ] String conf = "applicationContext.xml"; AbstractApplicationContext aContext = new ClassPathXmlApplicationContext(conf); ${ExampleBeann} ${e1} = aContext.getBean("${e1}",${ExampleBeann}.class); ${} 11 / 11
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服