001- Spring入门及maven构建spring的web项目
2015-08-04 11:39
651 查看
Spring入门
1、Spring作用
Spring提供了一个管理Bean组件的容器,该容器还提供了IOC和AOP特性。基于实现组件之间的解耦、组件的重复利用,提高程序灵活性。1.1、IOC
IOC Inversion Of Controll 反向控制,是一种设计思想。在Spring中,是指将对象的控制权交给Spring容器管理。控制权:可以指定调用关系,可以创建对象,可以管理和释放对象。
传统的程序设计:使用者(客户端类)需要创建使用类(用户类)、使用类(用户类)的依赖类(用户信息类)、装配他们及使用完销毁他们。
使用IoC思想后:使用者(客户端)只需要从IoC容器中获取使用类(用户类)
1.2、AOP
Aspect Oriented Programming面向方面编程。面向方面编程优点:将共通处理封装成了一个独立组件,利用配置形式作用在了某一批目标对象上,实现组件的重复利用,将切面和目标对象解耦,实现了低耦合应用。如:日志记录,事务处理,异常处理等等
2、基本使用
2.1、获取bean
通过ApplicationContext对象的getBean("bean配置的id")方法获取。以下是获取ApplicationContext对象方法:
a、 在初始化时保存
ApplicationContext ac = new ClassPathXmlApplicationContext ("applicationContext.xml");
说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。
b、通过具类获取
ac1= WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。
上面两个工具方式的区别是,前者在获取失败时抛出异常,后者返回null。
c、 继承自抽象类或接口
1)、抽象类ApplicationObjectSupport、WebApplicationObjectSupport提供getApplicationContext()方法,
Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。
2)、实现ApplicationContextAware接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。
Spring初始化时,会通过该方法将ApplicationContext对象注入。
2.2、bean基本配置
id属性:组件的在容器中的标识符.name属性:功能与id属性一样,区别在于name可以使用特殊字符;id不允许
class属性:指定组件类型
scope属性:指定组件对象创建模式。支持singleton(默认)和prototype。
singleton:指的是bean组件对象采用单例模式创建。值:true、false
prototype:指的是每次调用ac.getBean(),都会创建一个新的Bean对象返回。值:true、false
Bean组件在容器中的创建和销毁
a.如果bean定义scope采用非单例模式,该对象在调用ac.getBean()创建,使用完毕后,由垃圾回收器负责销毁
b.如果bean定义scope采用singleton(默认)
创建时机:在容器实例化时创建(默认)
销毁时机:在容器销毁时销毁,调用AbstractApplicationContext的close()方法.
init-method:指定对象初始化方法;
destroy-method:指定对象销毁方法.
lazy-init:对象创建延迟到调用ac.getBean("")方法.如果需要将容器中所有scope="singleton"组件都采用延迟创建,可以在<beans default-lazy-init="true">
3、demo
本例使用工程名:004maven_spring,tomcat中间件端口:8080创建maven的web项目参照:maven项目与myEclipse
3.1、pom.xml配置
在pom.xml的dependencies元素添加子元素:<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>2.5.6</version> </dependency>
3.2、web.xml配置
在web.xml的web-app元素添加子元素:<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
3.3、添加User类
在/src/main/java目录添加包:com.cft.demo.spring,再添加User类:package com.cft.demo.spring; public class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
3.4、添加文件applicationContext.xml
在/src/main/config目录下新建applicationContext.xml:<?xml version="1.0" encoding="UTF-8"?> <!-- 公共模块配置 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" > <bean id="user" class="com.cft.demo.spring.User"/> </beans>
3.5添加spring.jsp
在/src/main/webapp添加spring.jsp:<% org.springframework.context.ApplicationContext ac = org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext(application); com.cft.demo.spring.User user = (com.cft.demo.spring.User)ac.getBean("user"); user.setName("cft");%> <%=user.getName() %>
3.6验证测试
浏览器输入url:http://localhost:8080/004maven_spring/spring.jsp出现以上界面说明配置成功。
相关文章推荐
- myeclipse执行pull操作,出现错误提示
- spring @component的作用
- java获取本地IP地址,java获取本地多张网卡IP
- Java 获取APK安装程序的包名
- Java 获取APK安装程序的包名
- Java容器类的深入理解
- 解决Eclipse打开UTF-8文件乱码的几种方式
- java classpath里带星号*和不带星号的区别
- Java File类学习笔记4:自定义一个类,过滤指定扩展名的文件
- java 类初始化,实例化顺序
- Spring框架jar包对应的组件分类以及jar之间的依赖关系说明
- Spring MVC 静态资源处理
- 关于switch语句的一点介绍
- java中length,length(),size()区别
- [leetcode-68]Text Justification(java)
- Spring常用jar包的剖析
- Ubuntu下Eclipse无法正常启动问题解决
- spring mvc controller取到的中文参数是乱码
- Java:按值传递还是按引用传递详细解说
- 在Eclipse中安装SVN客户端插件