1、Spring整合web应用
添加依赖 Spring-web spring-context-support
配置监听器 web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:app*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
定义核心配置文件 applicationContext.xml
<bean id="now" class="java.util.Date" p:year="1900"/>
在 servlet中获取ApplicationContext,然后获取受管bean
ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(application);
Date now=(Date)ac.getBean("now");
out.println(now);
2、Spring整合Struts2框架
添加spring-web struts2-core
Struts2和Spring框架整合需要一个额外的插件包struts2-spring-plugin
配置Spring整合web应用的监听器
ContextLoaderListener
配置Struts2的前端控制器 web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.devMode</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
定义Struts2的核心配置文件 struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="default" extends="struts-default"
strict-method-invocation="false"></package>
</struts>
定义对象工厂: struts2默认使用xwork充当对象工厂,整合Spring框架后Action对象的创建应该由Spring负责
struts.xml定义常量用于设置对象工厂为spring
常量名称为struts.objectFactory
<constant name="struts.objectFactory" value="spring"/>
这个常量可以不用定义,因为在struts2-spring-plugin.jar中的struts-plugin.xml中已经定义了;当然定义了也不会出现任何错误
定义Action类
public class HelloAction extends ActionSupport {
private String username;
private String message;
@Override
public String execute() throws Exception {
if (StringUtils.isBlank(username))
username = "Struts2";
message = "Hello " + username + "!";
return SUCCESS;
}
Action组件在整合Spring后,是由Spring的IoC/DI容器负责管理。需要将Action配置在applicationContext.xml中
<bean id="helloAction" class="com.yan.action.HelloAction"/>
注意:因为action要求多实例单线程的运行方式,所以必须配置 scope=prototype,否则默认Spring的受管bean是单例的
<bean id="helloAction" class="com.yan.action.HelloAction" scope="prototype"/>
在Struts2的核心配置struts.xml中定义对应的路径
<action name="hello" class="helloAction">
<result>/msg_show.jsp</result>
</action>
注意:class不再是Action类的全名,而是Action类在Spring的IoC/DI容器的名称,对应<bean>的id属性值
页面输出HelloAction中的message属性值
vb
访问路径
http://localhost:8080/spring0060/hello.action?username=yanjun
3、Spring整合MyBatis,具体的整合方式至少有3种,要求大家熟悉MapperScanerConfig的整合方式
添加依赖 mybatis(框架) mybatis-spring(整合的插件)
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
还需要连接池和驱动
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
整合Spring框架后,所有的应用组件都将由Spring框架负责管理,例如连接池,sqlSessionFactory等
applicationContext.xml
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
p:driverClassName="${jdbc.driver}" p:url="${jdbc.url}" p:username="${jdbc.username}"
p:password="${jdbc.password}" destroy-method="close"/>
为了实现分离配置,将数据库连接的相关配置信息定义在一个database.properties资源文件中
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///test
jdbc.username=root
jdbc.password=eduask
引入context名空间以简化properties文件的解析
<context:property-placeholder location="classpath:database.properties"/>
然后在配置文件的其它位置就可以使用SpEL直接应用配置的值
配置SqlSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="dataSource" p:mapperLocations="classpath*:/com/yan/mapper/*.xml" />
创建表结构并使用maven对应的反向映射插件执行反向映射
create table t_users(
id bigint primary key auto_increment,
username varchar(20) not null,
password varchar(20) not null
)engine=innodb default charset utf8;
定义MapperScannerConfig自动扫描mybatis的相关配置信息
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
p:sqlSessionFactoryBeanName="sqlSessionFactory" p:basePackage="com.yan.dao"/>
注意属性sqlSessionFactory-ref已经不建议使用,一般使用p:sqlSessionFactoryBeanName注入SqlSessionFactory受管bean的名称
修改mapper接口,添加一个注解@Repository
@Repository("userDao")
public interface UserMapper {
UserBean selectByPrimaryKey(Long id);
定义业务:
@Service("userService")
public class UserServImpl implements IUserServ {
@Autowired
private UserMapper userMapper;
@Override
public void create(UserBean user) {
Assert.notNull(user,"参数错误!");
Assert.hasText(user.getUsername(),"参数错误!");
Assert.hasText(user.getPassword(),"参数错误!");
userMapper.insertSelective(user);
}
}
添加注解相关的配置:
<context:component-scan base-package="com.yan"></context:component-scan>
在com.yan包或者子包中查找有对应注解的类,有4大注解的类就是受管bean
4大注解: @Controller @Service @Repository @Component
对连接池进行单元测试
引入依赖 spring-test junit(要求4.8+)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.8.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
定义测试用例
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:applicationContext.xml")
public class EnvTest {
@Autowired
private DataSource ds;
@Test
public void testConnection() throws SQLException {
System.out.println(ds.getConnection());
}
}
spring与web struts2 以及MyBatis的整合
最新推荐文章于 2018-09-23 01:04:07 发布