1、 factory-method= factory-bean= *控制对象使用范围: scope=singleton或prototype singleton:一个,在容器中 只有一个对象 prototype:,每次调用 getBean都会产生一个新对象 指定初始化和销毁方法: init-method和destroy-method属性 init-method:在对象创建后,自动调用 指定的初始化方法 destroy-method:仅对scope=singleton 组件有效,在调用容器close方法 销毁时触发 指定Bean对象延迟实例化 单例组件,在Spring容器实例时自动 实例化;可以采用l
2、azy-init=true 将对象创建推迟到getBean()方法调用b.维护组件对象关系(IOC思想) IOC概念:Inversion of Controller 反向控制/控制反转 本质:改变了对象获取方式,由原有 自己创建对象应用,转为接收外界注入的 对象使用。由spring容器负责对象创建, 以及关系注入的控制。 Spring的IOC主要采用DI技术实现关系注入 Depedency Injection 依赖注入, Spring的DI又分为set注入,构造器注入 *set注入应用 手机组件:TelePhone 属性:cup,ram4.各种类型信息的注入 *a.基本信息注入 字符串,数值等
3、单个值.property name=属性 value=值 *b.Bean对象注入(也可以自动装配) ref=id值 *c.集合注入 List,Set,Map,Properties * -setmappropertiesprops!-*d.Spring表达式注入- 可以将某个Bean对象或集合中的信息注入 #id属性.属性 /调用getXXX方法 #id属性0 /如果是list,set数组之类的,可以使用1下标 #id属性.key /map或properties访问,如果下标越界,就报错了 #mapkey /Map里面存的是键值对,能取出来,但要存,在String只能是null 但是可以mapk
4、ey 类似EL表达式,可以在value=引号里面,也可以在标签里面 本质是调用get方法,所以编写bean时候,一定要写set/get方法注入null或 注入null,需要用到标签,其实我觉得不注入的话,那个属性就是null了,因为比较是 注意: 1.上面的值,能不能替换成对象,替换成bean 2.注入参数时候,如果需要引用其他bean 最好少用ref属性和value属性被,最好使用标签 1). 2).ref local= 两个bean必须在同一个文件夹,不然就报异常 3).ref= 属性JDK5.0 - 注解技术注解技术是在类定义中追加标记标记格式:标识符ComponentServiceRe
5、soruce标记只能出现在类的定义前,方法定义前,成员变量定义前注解好处:框架一般采用注解简化或替代 原有的XML文件配置。在类名标记1.指定路径context:component-scan base-package:包名 有时候需要一个统一的包名,不同的包需要被包在一个包里面,所以域名反写的规则最好遵守组件自动扫描使用: 可以简化PostConstruct 指定 init-method被这个标记的方法,会被作为初始化方法,实例化时候自动调用PreDestroy 指定 destroy-method被被标记的方法,会在容器关闭,销毁对象时候调用 如果定义了全局的默认的初始化,销毁方法,也是以这个
6、为优先的-很少使用注入注解 (在属性或setter方法上标记) Resource:会自动装配,并且按照先按name,后type的匹配方式注入 如果怕发生错误,可以指定name或type (name=bean名) (type=User.class) Autowired/Qualifier: 默认使用type匹配注入 可以使用另一个注解 Qualifier(bean名字)指定bean名注意: 可以省略掉set方法 都可以写在属性定义,或者setter方法上面 如果写了name,就不会再去找type匹配了 如果指定名称注入,不会再按类型匹配注入。=1.SpringMVC工作流程(理论) a.浏览器发
7、出一个HTTP请求 b.请求首先进入DispatcherServlet 主控制器 c.主控制器调用HandlerMapping组件 根据请求找映射的Controller处理 d.执行Controller处理方法,将返回 结果给ViewResolver组件 e.ViewResolver组件根据Cotroller返回 结果定位视图JSP,将模型数据传递给JSP f.由JSP生成响应结果,给浏览器输出2.SpringMVC开发过程(应用) a.搭建SpringMVC开发环境 b.流程设计 请求(变化)DispatcherServlet(固定)HandlerMapping(固定)Controller组
8、件(变化)ViewResolver(固定)JSP组件(变化) c.编写JSP,Controller组件 d.配置处理流程request.setCharacterEncoding(utf-8);3.-如何接收请求参数(应用) 方法参数(参数名字与请求key保持一致) 方法参数(实体对象,实体属性与key保持一致) -如何向页面传值 添加ModelMap方法参数 -如何使用session 添加HttpSession方法参数=/list.do-DispatcherServletHandlerMappingListControllerViewResolver/WEB-INF/list.jsp=4.如何
9、解决中文接收乱码问题CharacterEncodingFilter(Spring-web.jar提供)5.如何处理异常*a.全局异常处理 SimpleMappingExceptionResolver*b.局部异常处理 ExceptionHandler public String xxx( HttpServletRequest request,Exception ex)c.自定义ExceptionResolver HandlerExceptionResolver6.如何实现登录权限检查 使用session进行约定值判断。 实现方法:1.采用Filter;2.采用拦截器 a.拦截器组件简介 拦截器
10、组件是SpringMVC特有组件。 拦截器组件可以在Controller之前拦截; 也可以在Controller之后拦截; 还可以在JSP解析完毕给浏览器输出之前 拦截。 b.拦截器使用方法 首先编写一个拦截器组件(实现handlerInterceptor接口) 在约定方法中添加要插入的逻辑 然后在applicationContext.xml中配置=sessionScopu.session 直接从session找spring-webmvc-3.2.8.RELEASE.jarweb.xmlorg.springframework.web.servlet.DispatcherServletappli
11、cationContext.xmlorg.springframework.web.servlet.handler.SimpleUrlHandlerMappingDispaticherServlet(配置)servlet springmvcservlet-classorg.springframework.web.servlet.DispatcherServletinit-param contextConfigLocationparam-valueclasspath:applicationContext.xml/init-paramload-on-startup1 /加上为启动服务器时,实例化,不
12、加为第一次请求时实例化/servlet-转码-filterfilter-namemyfilterfilter-classorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8servlet-mappingurl-pattern-HanlderMapping(配置)handorg.springframework.web.servlet.handler.SimpleUrlHandlerMapping- 指定请求和controller对应关系 -mappingsprop key=/hello.dohelloControl
13、ler/props/property/bean注释版mvc:annotation-driven /-HelloController(编写+配置)- 配置controller -helloControllerDAO.Controller.helloControllercomponent-scan base-package=DAO-ViewResolver(配置)- 配置viewresolvar -viewresolverorg.springframework.web.servlet.view.InternalResourceViewResolver p:prefix=/WEB-INF/suffi
14、x=.jsp- 异常处理器 -bean class=org.springframework.web.servlet.handler.SimpleMappingExceptionResolverexceptionMappings- 异常类型视图名java.lang.Exceptionerrorinterceptorsinterceptor- 想栏谁 -mapping path=ok.do-放弃拦截-exclude-mapping path=/tologin.doorg.tarena.controller.LoginInterceptor/mvc:数据库链接- 声明定义jdbcTemplate -
15、templateorg.springframework.jdbc.core.JdbcTemplatedataSource-ref=dbcp- DataSource -mons.dbcp.BasicDataSourceusername=rootpassword=driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql:/localhost:3306/jsd1507dbpublic class EmpRowMapper implements RowMapper/第一个参:rs 第二个参:第几行记录/将当前rs指针指向的记录取出,封装成Emp返回EmpD
16、aoRepository /扫描DAOResource /注入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 findAll() Listc1java.util.GregorianCalendar- 采用Calendar.getInstance(),静态工厂方法 -c2java.util.CalendargetInstance- 采用
17、c2.getTime(),对象工厂方法 -dategetTimee1 lazy-init= init-method=init destroy-method=mydestroytest.ExampleBeannq1test.q- 信息注入 set方法-cpu晓龙hdd索尼mainbord华硕p2test.phone- 构造器注入 -constructor-arg index=0高/constructor-arg1低 DAO.MessageBeanname=age=18birth=2015-11-11friends tomjack - 读取db.properties文件,形成一个properties对象 -properties id=dbP location=db.properties/util:- 定义List对象 -list id=somelist小红小白set id=someset上海山东map id=somemapentry k
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1