Spring 3.0 学习-环境搭建和三种形式访问

理论学习

·PO(persistent object)是持久化对象,所谓的持久化就是和数据库对应的主要是字段上,典型的应用是在hibernate中通过实体对象直接操作数据库的增删查改。一般提供getset方法,实现序列化接口,可以继承自其它的object

·VO(value object)有时可以跟po一样,有时并不对应,因为其并不直接和数据库打交道,名字并不是强制的。

·POJO(Plain old java objects)简单java对象,不继承任何类,不实现任何接口,只有属性和getset方法。 


·Spring 的两个核心概念:

依赖注入 DI

面向切面编程 AOP

 

依赖注入让相互协作的软件保持松散耦合,而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件。

面向切面编程往往被定义为促使应用程序分离关注点的一项技术。系统由许多不同组件组成,每一个组件各负责一块特定功能。除了实现自身核心的功能之外,这些组件还经常承担着额外的职责。诸如日志、事务管理和安全此类的系统服务经常融入到自身核心业务逻辑的组件中去,这些系统服务通常被称为横切关注点,因为他们总是跨越系统的多个组件。

 

·Spring下载

Csdn下载地址:http://download.csdn.net/detail/bestcxx/9623917

下载下来的jar包:spring-framework-3.0.0.RC3-with-docs.zip

解压之后的内部结构:


·bean的配置文件的基本模板beanConfigurerTests.xml地址位于解压后的位置如下:

\..\spring-framework-3.0.0.RC3\projects\org.springframework.aspects\src\test\java\org\springframework\beans\factory\aspectj\beanConfigurerTests.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"
		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.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">

</beans>

· Spring 的核心框架自带了10个命名空间配置,刚才的出现在beans配置文件中的beans只是其中之一,全部描述如下:

aop:为声明切面以及将 @AspectJ注解的类代理为Spring切面提供了配置元素。

beans: 支持声明Bean和装配Bean,是Spring最核心也是最原始的命名空间。

context: 为配置Spring应用上下文提供了配置元素,包括自动检测和自动装配Bean,注入非Spring直接管理的对象。

jee:提供了与JavaEE API的集成,例如JNDIEJB

jms: 为声明消息驱动的POJO提供了配置元素。

lang: 支持配置由GroovyJRubyBeanShell等脚本实现的Bean

mvc:启用Spring MVC的能力,例如面向注解的控制器、视图控制器和拦截器。

oxm: 支持Spring的对象到XML映射配置。

tx: 提供声明式事物配置。

util: 提供各种各样的工具类元素,包括把集合配置为Bean,支持属性占位符元素。

 

 

·Spring模块

当我们下载Spring 并解压后,在dist 目录下可以看到20个不同的jar文件,它们依据所属功能可以划分为6个不同的功能模块。


·创建spring项目

1、myeclipse中创建一个新的web项目,springtest


为了便于以后使用maven管理项目,建立如下的目录结构



2、引入spring3.0 的所有jar包,下载下来后位于目录dist


此外,由于spring 还需要其他基础jar包的支持,而我们正好要配合使用struts2,所以还要引入下面的jar包,即struts2的基础jar

下载地址:http://download.csdn.net/detail/bestcxx/9626401


3、bean.xml 配置文件放置到 src.main.resourcesspring文件夹下,将文件名改为
applicationContext.xml


由于目前还没有具体的bean配置,所以该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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
</beans>

4、编写接口类-表演者

接口类是实现spring 依赖注入思想的基础,spring通过配置文件或者注解完成接口调用时的不同实体的注入,从而实现了松耦合。


Performer.java 的内容

package stu.bestcxx.springtest.facade;
/**
 * spring通过调用接口,而接口由不同的实现类来执行具体的实现,
 * 通过spring的配置文件或者注解完成"依赖注入"(DI)
 * 
 * @author WuJieJecket
 */
public interface Performer {
	public void perform();
}

5、编写表演者接口的实现类-具备具体表演技能

PerformJuggler.java 

package stu.bestcxx.spring.impl;
import stu.bestcxx.springtest.facade.Performer;
/**
 * 实现接口类 Perform
 * 杂技师 juggler
 * 其表演内容是抛豆子
 * 为了体现传参功能,其可以抛固定个数的豆子
 * 也可以通过构造方法完成注入 豆子的数量
 * 
 * @author WuJieJecket
 */
public class PerformJuggler implements Performer {
	//豆子的数量
	private int beanBags=3;
	//由于重构了无参构造方法,需要显示声明默认构造方法
	public PerformJuggler(){};
	//重构构造方法,增加入参
	public PerformJuggler(int beanBags){
		this.beanBags=beanBags;
		};
	@Override
	public void perform() {
		// TODO Auto-generated method stub
		System.out.println("杂技师表演抛豆袋子,数量是 "+beanBags);
	}
}


6、在配置文件applicationContext.xml

杂技师 juggler ,杂技师并不是一个具体的人,而是一个职业,这样Performer对应多个职业,一个职业对应多个人。至于这个人是谁?就是spring要做的事情了,将这个人注入到杂技师这个bean

<!-- 杂技师-juggler1 -->
	<bean id="juggler1" class="stu.bestcxx.spring.impl.PerformJuggler"/>

7、编写测试方法,让杂技师juggler1进行表演

根据maven规范(尽管这个项目没有使用maven,应该建立完善的测试方法



PerformJugglerTest.java内容如下:

package stu.bestcxx.spring.impl;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import stu.bestcxx.springtest.facade.Performer;
public class PerformJugglerTest {
	/*
	 * 杂技师 juggler1表演抛豆子 
	 */
	@Test
	public void testperform(){
		//从类路径获取spring的上下文
		ApplicationContext ctx=new ClassPathXmlApplicationContext("spring/applicationContext.xml");
		
		//根据配置文件,将杂技师 juggler1 注入到表演者 Performer
		Performer juggler1=(Performer) ctx.getBean("juggler1");
		
		//juggler1进行表演
		juggler1.perform();
	}
}

运行结果:


8、从文件系统获取spring的上下文

刚才的测试方法是从类路径中获取的beans的配置信息,下面演示从文件系统获取spring的上下文。在myeclipseNavigator视图模式下,我们看到,applicationContext.xml已经被编译到classes目录下



PerformJugglerTest.java中添加内容

/*
	 * 杂技师 juggler1表演抛豆子 
	 * 文件系统获取spring的上下文
	 */
	@Test
	public void testperform2(){
		//从文件系统获取spring的上下文,可以使用通配符表示多个文件,如aaaT.xml 和 bbT.xml 可以是*T.xml
		//ApplicationContext ctx=new FileSystemXmlApplicationContext("WebRoot/WEB-INF/classes/spring/applicationContext.xml");
		ApplicationContext ctx=new FileSystemXmlApplicationContext("classpath:spring/applicationContext.xml");
		
		//根据配置文件,将杂技师 juggler1 注入到表演者 Performer
		Performer juggler1=(Performer) ctx.getBean("juggler1");
		
		//juggler1进行表演
		juggler1.perform();
	}

9、使用XmlWebApplicationContext获取spring系统的上下文

在这种模式下,web 项目启动之后就会自动加载beans 的配置文件

我们在方法中使用的时候可以直接使用spring的依赖注入功能。

9.1优先是修改web.xml的内容,修改完后如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔 此参数用于后面的Spring Context Loader -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:spring/applicationContext.xml</param-value>
 </context-param>
 
 <!-- struts2 的filter 配置 -->
 <filter>
  <filter-name>springfilter</filter-name>
  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>springfilter</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>REQUEST</dispatcher>
 </filter-mapping>
 <listener>
  <description>Spring 刷新 Introspector 防止内存泄露</description>
  <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
 </listener>
 <listener>
  <description>Spring ApplicationContext 载入</description>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <session-config>
  <session-timeout>30</session-timeout>
 </session-config>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 <login-config>
  <auth-method>BASIC</auth-method>
 </login-config>
</web-app>

9.2 然后编写action


Juggler1Action.java 内容如下

package stu.bestcxx.springtest.action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import stu.bestcxx.springtest.facade.Performer;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Juggler1Action extends ActionSupport {
	private static final long serialVersionUID = 7483844875659263452L;
	/**
	 * 继承了struts2的 ActionSupport 类,直接重写 execute方法
	 */
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		//使用 XmlWebApplicationContext 获取 Spring 的上下文
		ActionContext ctx = ActionContext.getContext();       
	    HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);       
		ServletContext servletContext = request.getSession().getServletContext();    
		ApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(servletContext);
		//根据配置文件,将杂技师 juggler1 注入到表演者 Performer
		Performer juggler1=(Performer) wac.getBean("juggler1");
		//juggler1进行表演
		juggler1.perform();
		return SUCCESS;
	}
}

9.3新增struts.xml文件


struts.xml 内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<include file="struts/struts-juggler1.xml"></include>
</struts>


struts-juggler1.xml的内容

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="juggler1" extends="struts-default" namespace="/juggler1">
			<action name="juggler1" class="stu.bestcxx.springtest.action.Juggler1Action">
				<result name="success" type="redirect">https://www.baidu.com</result>	
			</action>
		</package>
</struts>


9.4 启动服务,访问如下地址,注意端口,我的测试环境是8085

http://localhost:8085/springtest/juggler1/juggler1.action

页面会跳转到百度首页,这不是重点,控制台打印输出


基础环境搭建和测试访问结束





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值