SSH整合(一)——直接获取ApplicationContext

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:   一,引入jar包              首先建立如下项目:                          接着,在项目中引入如下jar包:                                                           楼主本人属于比较笨的那种,总是引丢了。



  一,引入jar包


              首先建立如下项目:


           


              接着,在项目中引入如下jar包:


             

                       

       

             楼主本人属于比较笨的那种,总是引丢了。。


   二,基本XML配置

                    

 1,首先是web.xml中,spring跟strut2的基本配置:

 

 <!-- spring 监听器的配置 -->
   <listener>
    <listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
  </listener>
  
  <!-- strut2配置 -->
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*</url-pattern>
  </filter-mapping>


2,hibernate的连接配置


<?xml version="1.0" encoding="UTF-8"?>
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3软件包中的src\org\hibernate目录中找到此文件--> 
<!DOCTYPE hibernate-configuration PUBLIC 
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
          
<!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作--> 
<hibernate-configuration>
<!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序--> 
	<session-factory>
		 <!--设置数据库的连接url:jdbc:mysql://localhost/**,其中localhost表示mysql服务器名称,此处为本机,    **是数据库名--> 
		<property name="connection.url">
			jdbc:mysql://localhost/testhibernate
		</property>
		
		<!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。--> 
		<property name="dialect">
			org.hibernate.dialect.MySQLDialect
		</property>
		
		<property name="connection.username">root</property>
		<property name="connection.password"></property>
		<!-- 显示hibernate生产的SQL语句 -->
		<property name="show_sql">true</property>
		<property name="connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		<!-- 指定Map.hbm.xml的位置 -->
		<mapping resource="net/blogjava/nokiaguy/models/Map.hbm.xml"/>
	</session-factory>
</hibernate-configuration>


3,编写实体bean,配置bean跟表的对应关系


  <hibernate-mapping>
    	<class name="net.blogjava.nokiaguy.models.MapEntity" table="t_map">
    		<!-- 将id属性应射成自增类型 -->
    		<id name="id" column="id" type="int">
    			<generator class="increment"/>
    		</id>
    		<property name="keyword" column="keyword"/>
    		<property name="value" column="value"/>
    	</class>
    </hibernate-mapping>


 三,编写各层类

      

      1,数据访问DAO

     

package net.blogjava.nokiaguy.models;

import java.util.List;

import org.springframework.orm.hibernate3.HibernateTemplate;

public class MapDAO {

	private HibernateTemplate template; //需要spring-orm.jar包
	public MapDAO(HibernateTemplate template){
		this.template=template;
	}
	public String getValue(String keyword)
		
	{
		//在Spring中,不直接对Hibernate的Session进行操作,而是提供一个HibernateTemplate类来对Hibernate的Session进行操作。
		List value=template.find("select a.value from MapEntity a where a.keyword=?",keyword); //注意引入spring-tx..这个开头的jar包
		if(value.size()>0){
			return String.valueOf(value.get(0));
		}
		return null;
		
	}
}


2,业务逻辑Bean


package net.blogjava.nokiaguy.models;

public class MapService {
	private MapDAO dao;
	public MapService(MapDAO dao){
		this.dao=dao;
	}
	//验证value是否等于lhc
	public boolean validate(String keyword){
		String value=dao.getValue(keyword);
		//业务逻辑。。。。
		if(value==null){
			return false;
		}else if("lhc".equalsIgnoreCase(keyword)){
			return true;
		}
		return true;
	}
}


3,控制层Bean


package net.blogjava.nokiaguy.models;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class FirstSSHAction implements ServletRequestAware {
	private HttpServletRequest request;
	
	public String execute(){
		//获得ApplicationContext对象
		ApplicationContext applicationContext=WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
		//获得MapService对象
		MapService mapService=(MapService)applicationContext.getBean("mapService");
		//调用MapService类的validate方法,并在console中输出返回值
		System.out.println(mapService.validate("lhc"));
		
		return "success";
	}
	public void setServletRequest(HttpServletRequest request) {
		// TODO Auto-generated method stub
		this.request = request;
	}
}

四,Spring注入Bean


         如上代码,我们在获得ApplicationContext对象之后,通过这个对象的getBean方法,传入我们配置文件中配置的Bean的ID来注入Bean。


         我们在ssh.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:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop.xsd
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx.xsd">
	
	
<!-- 装配Session工厂对象,用于创建Hibernate Session对象 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
	<property name="configLocation" value="classpath:hibernate.cfg.xml">
	</property>
</bean>

<!-- 装配HibernateTemplate对象,该对象需要装配一个sessionFactory属性 -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
	<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<!-- 装配数据访问层组件 -->
<bean  id="mapDAO" class="net.blogjava.nokiaguy.models.MapDAO">
	<constructor-arg>
		<!-- 通过构造方法的参数将HibernateTemplate对象传入数据访问层组件 -->
		<ref bean="hibernateTemplate"/>
	</constructor-arg>
</bean>

<!-- 装配业务逻辑层组件 -->
<bean id="mapService" class="net.blogjava.nokiaguy.models.MapService">
	<constructor-arg>
		<!--将构造方法的参数MapDAO对象传入业务逻辑层 -->
		<ref bean="mapDAO"/>
	</constructor-arg>
</bean>

</beans>

     

      当在action中调用业务逻辑层组件的时候,通过spring初始化了DAO层组件,而初始化DAO层Bean的时候,我们又需要之前spring初始化Hibernate组件的结果作为参数。


      在这个XML文件中,我们将各层bean直接的依赖关系通过xml写在这里,一旦某曾出现变动,直接编写新的bean,更改这里的配置文件,完美实现各层的解耦合。


     PS:为了完成这个Demo,还需将这个配置文件引入applicationContext.xml文件:

        

<import resource="ssh.xml"/><!-- 导入ssh.xml文件 -->

      

      +在strut2.xml文件中配置action与jsp页面的对应关系。


       待续。。。






相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
XML Java 数据格式
深入解析Spring框架的ApplicationContext体系结构
深入解析Spring框架的ApplicationContext体系结构
107 0
|
5月前
|
存储 Java C++
理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory
理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory
|
6月前
|
Java Spring 容器
Spring底层原理之 BeanFactory 与 ApplicationContext
Spring底层原理之 BeanFactory 与 ApplicationContext
61 3
|
6月前
最全三大框架整合(使用映射)——applicationContext.xml里面的配置
最全三大框架整合(使用映射)——applicationContext.xml里面的配置
|
6月前
|
Java C++ Spring
深入Spring原理-1.BeanFactory与ApplicationContext的区别
深入Spring原理-1.BeanFactory与ApplicationContext的区别
94 0
|
11月前
|
XML Java 数据格式
[读书笔记]Spring中BeanFactory和ApplicationContext的联系和区别
[读书笔记]Spring中BeanFactory和ApplicationContext的联系和区别
51 0
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——Spring配置(applicationContext.xml)
使用JDBCTemplate实现与Spring结合,方法公用 ——Spring配置(applicationContext.xml)
|
XML Java API
BeanFactory与ApplicationContext区别和Spring快速入门
BeanFactory与ApplicationContext区别和Spring快速入门
BeanFactory与ApplicationContext区别和Spring快速入门
|
XML Java 数据格式
SpringBoot源码学习(三) BeanFactory 与 ApplicationContext
### 前言 + [上文](https://www.atatech.org/articles/145056) 已经分析了springboot启动的前半部分, 下面就要还是分析真正核心的spring容器的整个生命周期了, 但是在讲之前还是要把一些基本概念讲清楚。 + 因为这部分的文章在网络上实在是太多了, 随便搜一下就能搜到一脸盆 所以本文只会对我对这部分的认知做一些梳理和归纳 ##
111 0
SpringBoot源码学习(三) BeanFactory 与 ApplicationContext
|
XML 前端开发 Java
【Spring框架】我终于读懂了ApplicationContext(案例详解)
本期重点分享ApplicationContext基础概念以及应用场景!
965 0
【Spring框架】我终于读懂了ApplicationContext(案例详解)