一、spring框架的使用
- IOC容器:javabean的注入是springIOC最强大也是最方便的技术,以前我们需要new一个对象来完成对java类的实例化,现在spring框架通过DI注入的方式为我们提供了一个容器,也可以理解为机器,以前我们需要手动的去做产品,整个实例化过程都需要我们的参与,现在这个自动化的机器只需要你在xml文件里将类注入,框架就可以直接帮助你实例化java类,并讲这些javabean组件放在一个你可以叫做IOC的容器里,只不过这里因为实在xml文件的bean标签里注入的实体类,所以这里叫做javabean,也叫做Bean,在项目的开发过程中,我们需要类与类之间需要不断的传递数据,比如我们的dao层面向的是与数据库交互的操作,查询的时候数据从数据库流入到dao层,这时候需要service层接收并通过controller层传递给web层,这里的类与类之间的互调和方法互调的原理差不多,只要在某一个javabean中注入其他类的javabean就可以实现互调。当然也可以通过注解的方式互调,基本的原理都一样。那么除开注解注入的方式其他的注入方式:setter注入以及构造器注入,静态工厂、实体工厂注入这几种方式其实都是类似的原理。
- 采用setter注入的方式,互调的基本格式就是<bean id="自定义的id" class="java类的classpath"><property name="调用的javabean的id" ref="调用的javabean的原类名"></bean>一定要注意的是在java类中调用的时候要使用生成setter方法与我们注入的bean关系对应(以下的例子就是调用jdbcTemplate的方式,代码段一是UserDao调用JdbcTemplate的代码,代码段二是javabean的setter注入):
private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; }
!-- 配置userDao--> <bean class="com.hlc.dao.UserDaoImpl" id="userDao"> <property name="jdbcTemplate" ref="jdbcTemplate"/> </bean>
- 采用注解的方式需要注意的是context命名空间的设置与使用:1、扫描组件,2、扫描资源文件:
-
<!-- 加载properties文件内容,注意这里的classpath的必要性--> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 组件扫描:通常用在mvc的配置文件里--> <context:component-scan base-package="com.hlc.controller"/>
- spring监听器的使用:监听器的使用直接可以在我们打开服务器的时候就完成容器的自动创建,不需要手动的写ApplicationContext app = new ClassPathXmlContext("applicationContext.xml"s)结合app.getBean(XXX.class)创建容器了。使用的方法是一套的:在web.xml 文件里设置好context-param,并将listener设置好:
-
<!--全局参数,给监听器用的--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!--监听器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
- 反射:IOC实现控制反转的底层原理就是java反射,关于java反射可以查看我的文章:http://t.csdn.cn/Tn7n7
二、springmvc框架的使用
- springmvc前端控制器DispatcherServlet:这个家伙就是springmvc提供给我们的强大中央处理器,一整个web层面的请求与数据的中央媒介,它的设置与标签的属性:
-
<!--servlet请求分发器,也可以称为中央控制器--> <servlet> servlet服务名称 <servlet-name>DispatcherServlet</servlet-name> 这行代码是指向DispatcherServlet的路径,当然这个路径是springMVC框架提供的 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 定义初始化参量,在DispatcherServlet创建的时候就会访问读取这个初始化参量里的内容 <init-param> 初始化参量名 <param-name>contextConfigLocation</param-name> 初始化参量的值,这里指向的是我们写好的springMVC的配置文件路径 <param-value>classpath:springMVC.xml</param-value> </init-param> 这行代码英文意思就是启动开始,可以认为里面的数值是加载servlet的优先值,都是正整数的话就是,谁小谁先被加载,如果是0则是初始化容器时加载。如果是负数就是选择加载了。 <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> 这的/是所有,之前看别人写的是*.do,好像是之前的那个框架的写法吧 <url-pattern>/</url-pattern> </servlet-mapping>
- springmvc提供的新注解:实现web路径的设置也可以理解为与提供一个服务器标识的路由,用来和前端接合@RuequestMapping(value="/xxx"),实现数据回写:@ResponseBody,实现数据请求:@RuequestParam等等。
- springmvc的注解驱动与默认静态资源访问权限的开放:
-
<!--默认的是静态资源权限开放--> <mvc:default-servlet-handler/> <!--注解驱动--> <mvc:annotation-driven/>
- springmvc的内部资源视图解析器:
-
<!--内部资源视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver"> <property name="prefix" value="/pages/"/> <property name="suffix" value=".jsp"/> </bean>
- springmvc的context与springmvc的mvc命名空间的设置方法一致。
三、jdbcTemplate的使用
- 设置数据源:使用spring容器为我们完成这个工作,当然就是把C3P0数据源类注入到springIOC容器中,代码固定,实现解耦将数据库驱动密码等信息放置到一个叫做jdbc.properties的文件中:
-
<!-- 先加载properties文件内容,注意这里的classpath的必要性--> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 再进行数据源的配置--> <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean>
- 设置JdbcTemplate模板对象的注入
-
<!-- 配置jdbcTemplate--> <bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean>
- JdbcTemplate模板的使用:我们已经将它使用setter注入到容器中了,那么我们在类中直接调用它就可以使用,具体的格式是:jdbcTemplate.update(sql:"",values)/jdbcTemplate.query(sql:"",new BeanPropertyRowMapper<java实体类>(java实体类.class))