自己总结的Spring 的一些知识,Spring IOC,MVC

来源:互联网 发布:warframe淘宝买装备 编辑:程序博客网 时间:2024/05/18 02:32

一、    Spring

1、使用Spring需要的基本的配置:

1)、添加支持的jar包(这个可以网上自己百度下)。

2)、添加spring的配置文件applicationContext.xml(这个名字也可以自己定义),一般存放在src下面,这个时候Spring容器的环境就已经搭建好了:

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xmlns:context="http://www.springframework.org/schema/context"

      xmlns:jdbc="http://www.springframework.org/schema/jdbc"

     xmlns:jee="http://www.springframework.org/schema/jee"

     xmlns:tx="http://www.springframework.org/schema/tx"

     xmlns:jpa="http://www.springframework.org/schema/data/jpa"

     xmlns:util="http://www.springframework.org/schema/util"

       xmlns:mvc="http://www.springframework.org/schema/mvc"

    xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsd

http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsd

http://www.springframework.org/schema/jdbchttp://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd

http://www.springframework.org/schema/jeehttp://www.springframework.org/schema/jee/spring-jee-3.2.xsd

http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.2.xsd

http://www.springframework.org/schema/data/jpahttp://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd    

http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-3.2.xsd

http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

</beans>

3)、这个时候就可以使用spring容器进行Bean的管理,在applicationContext.xml中配置需要管理的bean,如下:

 <!--   id是唯一对于这个Bean的标识,不能重复,实例化的时候根据id进行实例化。Class是该类的完全限定名    -->  <bean id=”a”class=”com.shxzhlxrr.A”/>

  a、 使用静态工厂的方法进行实例化,需要配置一个factory-method的属性

<bean id=”b” class=”com.shxzhlxrr.B” factory-method=”getInstance”/>

b、 使用使用动态的工厂进行实例化,需要先将实例化的工程进行配置

<bean id=”a” class=”com.shxzhlxrr.A”/><bean id=”b” factory-bean=”a” factory-method=”getB”/>

2、控制Bean的实例化和销毁

   1)、Bean的作用域:

Singleton,单例,一个Bean定义对应一个Bean实例,不设置时默认为该值。

Prototype,一个Bean定义对应多个实例。

Request,在一次http请求中一个Bean定义对应一个Bean实例,仅限于web环境。

Session,在一次http Session中,一个Bean定义对应一个实例,仅限于web环境。

global Session,在一个全局的httpsession 中,一个Bean定义对应一个实例。

2)、Bean的初始化和销毁

 初始化:在bean中添加init-method属性,值为初始化方法的名字

注意,在Spring容器建立的时候,Spring容器就会把所有的Bean对象进行初始化,如果想要容器在实力化的时候再进行初始化可以设置lazy-init属性为true

销毁化:在bean中添加destroy-method属性,值为销毁方法的名字

该属性只对单例模式有效,即scope的值为singleton

3)、对Bean进行初始化的操作可以调用初始化方法进行初始化(参考上面),也可以使用setter方法或构造方法进行初始化的操作。

a、使用setter方法进行初始化

  <property name=”(属性的名字)” value=”(属性的值)”/>

b、使用有参的构造方法进行初始化

  <constructor-arg name=”属性的名字”(也可以使用index属性进行赋值,该值是构造方法中你想赋值的属性的索引,从0开始) value=”属性的值”/>

3、depend-on(依赖),当一个bean对另一个bean存在依赖关系的时候就可以使用该属性指定依赖对象Bean,该值是依赖对象的id。

当具有depend-on属性的bean进行实例化的时候,会把它的依赖对象也进行初始化。

4,spring的自动的装配的功能:

  在bean的配置中使用autowire可以自动的对bean进行赋值

no,默认值

byName,根据名字在容器中找与属性名字完全一样的bean进行赋值的操作。

   byType,根据属性的类型进行赋值

  constructor,跟byType一样你,只不过他是应用于构造函数

  autodetect,通过bean类自动的决定使用constructor,还是byType.

  示例:

<beanid=”userDao” class=”com.shxzhlxrr.bean.UserDao” autowire=”byName”/>

该UserDao中有dateSource属性,如果bean中有id为dataSource的,就会进行自动的赋值。

5,Bean对象的注入,分为内部bean和外部bean两种。

  A,<property name=”userDao”>

<bean class=”com.dao.OracleUserDao”></bean>

</property>

B,使用ref属性引入外部bean

<propertyname=”userDao” ref=”dataSource”/>

6,注入集合,所有的集合都可以使用ref的方式进行注入,也可以直接注入。

<util:mapid="twomap">

         <entrykey="001"value="Java语言基础"></entry>

         <entrykey="002"value="C++"></entry>

</util:map>    

     

<util:listid="onelist">

         <value>tom</value>

         <value>jack</value>

</util:list>


<util:propertiesid="prop">

            <propkey="p1">001</prop>

            <propkey="p2">002</prop>

            <propkey="p3">003</prop>

</util:properties>

 

注入配置文件的值

   <util:properties id=”jdbcProperties”location=”classpath:db.properties”></util:properties>

使用方法:value=”#{jdbcProperties.driver}”

 

7,组件扫描:指定一个包路径,spring会自动的扫描该包及子包下所有的组件类,当发现组件类的前面有特定的注解的时候就将该组件加入到spring容器,等价于原有配置中的bean。

  A,指定扫描类路径的配置

   <context:component-scan base-package=”需要扫描的路径”>

B,注解标记

1),类的注解

   @Component,通用注解

   @Named,通用注解,一般使用@Component

   @Respository,持久层组件注解

   @Service,业务层组件注解

           @Controller,控制层组件注解

2),@PostContruct,指定初始化回调方法

   @PreDestroy,指定销毁回调方法。

下面的注解可以用在属性或setter方法上,实现关系注入

@Resource,还可以指定名字@Resource(“name”),默认首先按名字进行匹配,然后按类型进行匹配

@Autowired/@Qualifier默认按类型进行匹配。

public class UserService{

     //@Autowired

    //@Qualifier(“userDao”)

   private UserDao userDao;

public void setUserDao(@Qualifier(“userDao”)UserDao dao){

     this.userDao = dao;

}

}

@Inject(需要导入jar包)/@Named,用法同Autowired

8,注入表达式,@Value可以注入表达式,首先需要在xml中配置一个properties。

   <util:properties id=”jdbcProps” location=”classpath:db.properties”/>

然后,

public class JDBCDataSource{
    @Value(“#{jdbcProps.url}”)
private String url;
  @Value(“#{jdbcProps.driver}”)
public void setUrl(String driver){
}
}

二、  spring-mvc

1、    处理流程

A、先导入支持jar包。

B、有一个servlet处理所有的请求。DispatcherServlet控制器。因此需要首先在web.xml中对其进行配置。

C、控制器根据HandlerMapping找到相应的控制器Controller组件。需要在spring.xml中进行配置,并建立好控制器组件。

D、控制器处理完之后返回一个ModelAndView对象,封装了处理结果数据和视图名称。

   E、控制器在接受了ModelAndView之后,调用ViewResolver组件定位view并传递数据,生成响应页面。

2、    spring-mvc默认采用转发的方式定位视图。

重定向:

RedirectView view = new RedirectView("login.form");

return ModelAndView(view);

注意:重定向的时候会把request中的数据清空,如果想要传递参数,可以使用session。

3、    中文乱码的解决方案:

a)  、获取request,repsones设置解码编码为utf-8。设置响应的页面的编码为utf-8,解码为utf-8。该方式只能够解决post方式的乱码。

b)  、要解决get方式的请求的乱码需要自己进行转码,先将请求的数据转换为bytes,再根据utf-8转换为字符串。

c)  、在web.xml中配置CharacterEncodingFilter。需要表单提交的方式为post。

4、    拦截器

拦截器要实现HandlerInterceptor接口,重写三个方法。

PreHandle,处理器执行前调用,如果想要拦截就反悔false。

postHandle,处理器执行后,视图调用之前,可以通过ModelAndView对象对模型数据进行处理。

afterComletion,整个请求完了之后调用。

5,Spring MVC 和JDBC技术开发的主要步骤

a) 、创建web工程,搭建Spring MVC 和 JDBC技术环境,导入jar包,配置applicationContext.xml。

b) 、基于jdbcTemplate实现DAO组件,需要配置一个jdbcTemplate,dataSource。

c) 、编写配置Spring MVC的主要组件,例如,ControllerHandlerMappingViewResolver等。

d) 、编写jsp视图组件,利用标签和表达式显示模型数据。

 

 

2 0
原创粉丝点击