Spring小知识

 1. IOC的实现原理在初始化一个Spring容器时,Spring会去解析指定的xml文件,当解析到其中的<bean>标签时,会根据该标签中的class属性指定的类的全路径名,通过反射创建该类的对象,并将该对象存入内置的Map中管理。其中键就是该标签的id值,值就是该对象。

    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

  之后,当通过getBean方法来从容器中获取对象时,其实就是根据传入的条件在内置的Map中寻找是否有匹配的键值,如果有则将该键值对中保存的对象返回,如果没有匹配到则抛出异常。

    Person p1 = (Person) context.getBean("person");

  由此可以推测而知:默认情况下,多次获取同一个id的bean,得到的将是同一个对象。

    Person p1 = (Person) context.getBean("person");

    Person p2 = (Person) context.getBean("person");

  即使是同一个类,如果配置过多个<bean>标签具有不同的id,每个id都会在内置Map中有一个键值对,其中的值是这个类创建的不同的对象

    <bean id="person" class="cn.tedu.domain.Person"></bean>

    <bean id="person2" class="cn.tedu.domain.Person"></bean>

  同一个<beans>标签下不允许配置多个同id的<bean>标签,如果配置则启动抛异常

    <bean id="person2" class="cn.tedu.domain.Person"></bean>

     <bean id="person2" class="cn.tedu.domain.Person"></bean>错误

2.无参构造创建对象

  <bean id="person" class="cn.tedu.domain.Person"></bean>

  Spring工厂创建对象

  <bean id="student" class="cn.tedu.domain.StudentSpring"></bean>

!!!重点:一般都用无参构造创建对象,就算带有参构造,也要写一个无参构造用来给sping反射对象,当是一个抽象类,接口什么的没有无参就使用spring工厂创建对象

3.别名标签

  <bean id="person" class="cn.tedu.domain.Person"></bean>

  <alians name="person" alians="p1"/>

4.<bean id="hero" class="cn.tedu.domain.Hero" autowire="byName">

  <!-- <property name="cat" ></property> -->会自动通过Name中的cat找到bean不用写

  </bean>

  <bean id="cat" class="cn.tedu.domain.cat"></bean>

5.spring注解完成IOC(控制反转)

  1.开启包扫描

    <context:component-scan base-package="cn.tedu.domain"/>

  2.在类上加上注解@component 

    @component (加入自己定义的id)当然默认的是第一个字母小写,如果第二个字母也是大写,则id就是它本身

6.spring注解完成DI(依赖注入)

 

  1.开启包扫描

 

    <context:component-scan base-package="cn.tedu.domain"/>

  2.开启注解方式属性注入

    <context:annotation-config/>

  3.指定要读取的properties文件

    <context:property-placeholder location="classpath:/p.properties"/>

  4.@Value(${id})写在属性上

  5.声明要引用的集合数据

    <bean id="hero" class="cn.tedu.domain.Hero" autowire="byName">

      <property name="name" value="上官婉儿"></property>
      <property name="age" value="18"></property>
      <property name="jobs">
        <list>
          <value>总路</value>
          <value>上路</value>
          <value>打野</value>
        </list>
      </property>
      <property name="set">
        <set>
          <value>s1</value>
          <value>s2</value>
          <value>s3</value>
          <value>s4</value>
          <value>s5</value>
        </set>
      </property>
      <property name="map">
        <map>
          <entry key="k1" value="v1"></entry>
          <entry key="k2" value="v2"></entry>
          <entry key="k3" value="v3"></entry>
          <entry key="k4" value="v4"></entry>
        </map>
      </property>
      <property name="props">
        <props>
          <prop key="p1">pv1</prop>
          <prop key="p2">pv2</prop>
          <prop key="p3">pv3</prop>
          <prop key="p4">pv4</prop>
        </props>
      </property>
      </bean>

    5.@Value("{@props}")写在非基本属性上

  6.@Autowired

     @Qualifier("dogx")写在自定义属性上

    <bean id="dogx"  class="cn.tedu.domian.dog"></bean>

  7.注解实现单例和多例(其他注解)

    @Scope("prototype")

    @Lazy

    @PostConstruct

    @PreDestroy

7.装饰模式是去加强方法和新增方法

  代理模式步调用原来方法来改造被代理本身

8.通过接口来实现不同的数据库切换,还有静态代理

9.在myeclipse上改项目发布的路径,右键项目——>Properties——>MyEclipse——>Web更改

10.

@RequestMapping("/hello.action")
public ModolAndView hello() {
ModolAndView mav = new ModolAndView();
mav.addAttribute("msg2","hello sptingMVC~");
return mav;
}

@RequestMapping("/hello2.action")
public String hello2(Modol modol) {
modol.addAttribute("msg2","hello2 sptingMVC~");
return "hello2";
}

11.

<form action="${pageContext.request.contextPath }/test04.action">
用户名<input type=="text" name="name"/>
年龄<input type=="text name="age"/>
狗名<input type=="text" name="dog.name"/>
狗龄<input type=="text" name="dog.age"/>
<input type=="submit" value="提交"/>
</form>

 

 12.SpringMVC解决乱码问题

   <!-- 全站乱码解决过滤器 -->只对POST提交有效

    <filter>

      <filter-name>characterEncodingFilter</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>
    <filter-mapping>
      <filter-name>characterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>

  对GET方式

    username = new String(username.getByte("ios8859-1"),"utf-8");

13.注册用户自定义类型转换器,命令springmvc在处理日期时用指定的日起格式化器

  @InitBinder

  public void InitBinder(ServletRequestDataBinder binder){

    binder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-mm-dd"))

  }

14.SpringMVC文件上传

  1.表单

    1.表单必须是Post提交

    2.表单必须是enctype="multipart/form-data" 

    3.文件上传项必须有name属性

      

  2.在配置文件中配置文件上传工具

    

  3.在Controller中实现文件上传

    

 

      @RequestMapping("/test09.action")

    public void test(String name,String addr,MultiparFile f01)  throws IOException{

      InputStream in = f01.getInputStream();

      OutputStream out = new FileOutputDtream("d://"+f01.getName());

      byte [] tmp = new byte[1024];

      int len = 0;

      while((len = in.read(tmp))!=0){

        out.write(tmp,0,len);

      }

      out.flush();

      out.close();

      in.close();

15.路径动态数据的获取(RESTFul风格的请求参数处理)

  

 

16. Spring帮忙完成请求转发和重定向

  forward:/xxx.action

  redirect:/xxx.action

可以利用转发 实现允许用户访问WEB-INF下保护的指定资源(重定向不行,因为它是用户第二次访问不到)

17.首先SpringMVC默认的是requset传递数据,通过注解和直接写来达到session传递参数

  1.@Controller

     @SessionAttributes("msg1")所有msg1都在session放一份

      public class Details03{

      @RequestMapping("/Detail03/test04.action")

      public String test04(Model model){

        modol.addAttribute("msg2","hello2 sptingMVC~");
        return "forward:/WEB-INF/d03_test01.jsp";

      @RequestMapping("/Detail03/test05.action")

 

      public String test05(HttpSession session){

 

        session.setAttribute("msg2","hello2 sptingMVC~");
        return "forward:/WEB-INF/d03_test01.jsp";

 

 

  }

18.异常处理

  a. 为当前Controller配置错误处理

    

    b.注解方式配置全局的错误处理

    

    c.配置文件方式配置全局错误处理,在SpringMVC配置文件中配置(  b和c等价  )

              <!-- 配置全局错误提示 -->

 

      <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

 

        <property name="exceptionMappings"> <props>

 

        <prop key="java.lang.NullPointerException">null_err</prop>

 

        <prop key="java.io.IOException">io_err</prop>

 

        <prop key="java.lang.Throwable">g_err</prop> </props>

        </property>

      </bean>

 

 

 

 

 

 

 

 

 

 

 

posted on 2019-05-07 21:29  Ouchzzzzz  阅读(267)  评论(0编辑  收藏  举报

导航