基于Annotation注解整合SSH框架和基于XML文件配置Bean整合SSH框架
2017-07-06 17:31
543 查看
基于Annotation注解整合SSH框架和基于XML文件配置Bean整合SSH框
1.新建一个动态web工程添加jar包
2.在com.digital.entity包下创建实体类UserInfo与数据中digital数据表user_Info对应 创建映射UserInfo.hbm.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.digital.entity"> <class name="UserInfo" table="user_info" catalog="digital"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="native"></generator> </id> <property name="userName" type="java.lang.String"> <column name="userName" length="16" not-null="true" /> </property> <property name="password" type="java.lang.String"> <column name="password" length="16" not-null="true" /> </property> </class> </hibernate-mapping>
使用Annotation完成UserInfo实体类与数据表的映射关系
@Entity @Table(name = "user_info", catalog = "digital") public class UserInfo {
对类中的属性进行映射 -主键属性
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", unique = true, nullable = false) public int getId() {
对非主属性
@Column(name = "userName", length = 16) public String getUserName() { return userName;
使用注解类后,就不在需要UserInfo.hbx.xml映射文件删除
—————————————————————————————————————————————————————————
3.Spring整合hibernate
目的-由Spring的IOC容器来管理Hibernate的SessionFactory
让Hibernate使用Spring的声明式事务
实现:
在src文件下创建Spring配置文件applicationContextxml
基于xml配置数据源dataSource
配置hibernate的sessionFactory实例
声明hibernate事务管理器、定义事务通知、定义切面、将事务通知和切面组合起来
—————————————————————————————————————————————————————————
4.配置applicationContext.xml文件
先加入头部声明文件、命名空间并且将各个命名空间关联到项目里
加入c3p0数据源(实例化数据源)
<!-- 配置数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> 4000 <property name="jdbcUrl" value="jdbc:mysql:///digital" /> <property name="user" value="root" /> <property name="password" value="123456" /> <property name="minPoolSize" value="5" /> <property name="maxPoolSize" value="10" /> </bean>
配置Hibernate的SessionFactory(引用ref bean注入数据源dataSource、设置Hibernate基本属性,配置方言mysql,实例化SessionFactory)
在jar文件中寻找class的类文件
定义SessionFactory 的id Bean从jar包内引用类orm.hibernate5.LocalSessionFactoryBean配置hibernate的SessionFactory实例
applicationcontext文件中为SessionFactory中name=“dataSource”属性注入数据源、
为SeesionFactory中基本属性name=“hibernateProperties”配置Hibernate基本属性方言、
<!-- 配置Hibernate的sessionFactory实例 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <!-- 配置数据源属性 --> <property name="dataSource"> <ref bean="dataSource" /> </property> <!-- 配置 Hibernate的基本属性--> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> </props> </property>
配置Hibernate的映射文件的位置名称(引用注入UserInfo.hbx.xml)
<!-- 配置 Hibernate映射文件的位置及名称--> <property name="mappingResources"> <list> <value>com/digital/entity/UserInfo.hbm.xml</value> </list> </property> </bean>
定义Hibernate事务管理器Bean(为TransactionManager事务管理器属性name=“SessionFactory”引用ref= SessionFactory实例,注入事务管理器中)
<!-- 声明Hibernate事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean>
声明式事务管理也有两种常用的方式
基于tx和aop名字空间的xml配置文件基于@Transactional注解。显然基于注解的方式更简单易用,更清爽。
基于annotation的配置(后面在applicacontext文件中添加的内容都删除)
开启注释处理器<!-- 开启注解处理器 --> <context:annotation-config />
基于@Transactional注解方式的事务管理
<!-- 开启Spring的Bean自动扫描机制来检查与管理Bean实例 --> <context:component-scan base-package="com.digital" />
开启自动扫描机制检查与管理Bean实例
<tx:annotation-driven transaction-manager="transactionManager" />
简单的介绍事务的规则(传播行为)
常用required
Required
Support
Never
事务的管理主要任务:创建回滚提交事务 是否需要创建事务及如何创建事务有事务的传播行为控制
—————————————————————————————————————————————————————————
基于tx和aop名字空间的xml配置文件
定义数据通知,事务管理(将事务通知交给事务管理器处理,指定事务传播规则)<!-- 定义事务通知 ,需要事务管理器 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 指定事务传播规则 --> <tx:attributes> <!-- 对所有方法应用REQUIRED事务规则 --> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice>
定义切面,并将事务通知和切面组合(定义那些方法应用那些规则)
<!--定义切面,并将事务通知和切面组合(定义哪些方法应用事务规则) --> <aop:config> <!-- 对com.digital.service包下的所有类的所有方法都应用事务规则 --> <aop:pointcut id="serviceMethods" expression="execution(* com.digital.service.*.*(..))" /> <!-- 将事务通知和切面组合 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" /> </aop:config>
—————————————————————————————————————————————————————————
5.DAO层的开发
public interface UserInfoDAO { public List<UserInfo> search(UserInfo cond); }
调用注入的Session,进行增删改查数据库操作
public class UserInfoDAOImpl implements UserInfoDAO { SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; }
定义UserInfoDAOImpl类的Bean并且类中的属性name=sessionFactory 注入实例ref=SessionFactory
<!-- 定义com.digital.dao.impl.UserInfoDAOImpl类--> <bean id="userInfoDAO" class="com.digital.dao.impl.UserInfoDAOImpl"> <property name="sessionFactory" ref="sessionFactory" /> </bean>
使用注解@Repository(”userInfoDAO”)在Spring容器中注册一个userInfoDAO实例
@Repository("userInfoDAO") public class UserInfoDAOImpl implements UserInfoDAO {
使用注解@Autowired完成SessionFactory属性的注入
// 通过@Autowired注解注入Spring容器中的SessionFactory实例 @Autowired SessionFactory sessionFactory;
—————————————————————————————————————————————————————————
6.Service层的开发
UserInfoService类public interface UserInfoService { public List<UserInfo> login(UserInfo cond); }
在UserInfoServiceImpl中userInfoDAO属性对象注入UserInfoDAO对象实例
public class UserInfoServiceImpl implements UserInfoService { UserInfoDAO userInfoDAO; public void setUserInfoDAO(UserInfoDAO userInfoDAO) { this.userInfoDAO = userInfoDAO; }
定义Bean为在UserInfoServiceImpl类中的属性name=”userInfoDAO“注入ref=“userInfoDAO”实例
<!-- 定义UserInfoServiceImpl类,并为其userInfoDAO属性注入值--> <bean id="userInfoService" class="com.digital.service.impl.UserInfoServiceImpl"> <property name="userInfoDAO" ref="userInfoDAO" /> </bean>
使用@Service注解:在Service服务层实例化UserInfoServiceImpl类放入Spring容器中
@Service("userInfoService") public class UserInfoServiceImpl implements UserInfoService {
使用@Transactional实现事务管理(通过注解@Transactional的不同参数满足事务的不用事务要求)
//使用@Transactional注解实现事务管理
@Transactional
//使用@Service注解在Spring容器中注册名为userInfoService的UserInfoServiceImpl实例
@Service("userInfoService") public class UserInfoServiceImpl implements UserInfoService {
使用@Autowired实现userInfoDAO的实例注入
//使用@Transactional注解实现事务管理
@Transactional
//使用@Service注解在Spring容器中注册名为userInfoService的UserInfoServiceImpl实例
@Service("userInfoService") public class UserInfoServiceImpl implements UserInfoService {
//使用@Autowired注解注入UserInfoDAOImpl实例
@Autowired
UserInfoDAO userInfoDAO;
—————————————————————————————————————————————————————————
7.Action层的开发
public class UserInfoAction extends ActionSupport { UserInfo ui; public UserInfo getUi() { return ui; } public void setUi(UserInfo ui) { this.ui = ui; } UserInfoService userInfoService; public void setUserInfoService(UserInfoService userInfoService) { this.userInfoService = userInfoService; } public String doLogin() throws Exception { List<UserInfo> uiList = userInfoService.login(ui); if (uiList.size() > 0) { // 登录成功,转发到到index.jsp return "index"; } else { // 登录失败,重定向到login.jsp return "login"; } }
在Spring配置文件中配置Action实例(在UsuerInfoAction类中属性userInfoService需要注入实例,设置原型模式scope=“prototype”每一个请求都注入新的
)
<!-- 定义UserInfoAction类 ,并为其中属性userInfoService注入值 --> <bean name="uiAction" class="com.digital.action.UserInfoAction" scope="prototype"> <property name="userInfoService" ref="userInfoService" /> </bean>
在项目stc中目录创建struts2的配置文件struts.xml
class=“uiAction”为页面提交的action提交到Spring 中的方法uiAction,并注入Bean实例
method=“doLogin”为页面提交的action提交到UserInfoAction类中doLogin方法响应
<struts> <constant name="struts.i18n.encoding" value="utf-8"></constant> <!-- 定义一个名称为digital的包,继承struts 2的默认包,指定命名空间为"/" --> <package name="digital" namespace="/" extends="struts-default"> <!-- 为类中的方法配置映射 --> <action name="doLogin" class="uiAction" method="doLogin">
为UserInfoAction类doLogin方法返回的结果响应到指定跳转的页面
<result name="index" type="dispatcher">index.jsp</result> <result name="login" type="redirect">login.jsp</result> </action> </package> </struts>
使用@controller:在容器中对UserInfoAction类实例化 使用
@scope(”prototype”):指定原型模式
//使用@Controller注解在Spring容器中注册UserInfoAction实例 //使用@Scope("prototype")指定原型模式 @Controller @Scope("prototype") public class UserInfoAction extends ActionSupport { UserInfo ui;
使用@Autowired:对userInfoService注入实例化对象
// 使用@Autowired注解注入UserInfoServiceImpl实例 @Autowired UserInfoService userInfoService;
使用@Action注解:ACTION中下的一个方法doLogin方法,通过改变value值响应多个不同的URL.
@Result中name值根据不同的type值 跳转到不同的location本地页面
@Action(value=”/doLogin”,results={ @Result(name=”index”,type=”dispatcher”,location=”/index.jsp”), @Result(name=”login”,type=”redirect”,location=”/login.jsp”)}) public String doLogin()throws Exception { List<UserInfo> uiList = userInfoService.login(ui); if(uiList.size()>0) { return "index"; } else return "login"; }
—————————————————————————————————————————————————————————
8.Spring整合Struts2
目的:使用SpringIOC容器管理Struts2的Action
步骤:
在web.xml配置文件中制定以Lisetener的方式启动Spring,
并配置Struts2的StrutsPrepareAndExecuteFilter
实现步骤
指定Listerner方式启动Spring
监听类的导入
<!-- 指定以Listerner方式启动Spring --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
指定Spring的上下文配置文件applicationContext
<!-- 指定Spring配置文件的位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
配置struts2的核心控制器
<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>
整个web.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>digital-1</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 指定以Listerner方式启动Spring --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
<!-- 指定Spring配置文件的位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
<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>
</web-app>
—————————————————————————————————————————————————————————
9.Struts文件配置 头部声明
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
Anction访问的Spring的bean实例(class=uiAction),完成Action类里面属性的配置
<struts> <constant name="struts.i18n.encoding" value="utf-8"></constant> <!-- 定义一个名称为digital的包,继承struts 2的默认包struts-default,指定命名空间为"/" --> <package name="digital" namespace="/" extends="struts-default"> <!-- 为类中的方法配置映射 --> <action name="doLogin" class="uiAction" method="doLogin"> <result name="index" type="dispatcher">index.jsp</result> <result name="login" type="redirect">login.jsp</result> </action> </package> </struts>
基于annotation配置修改struts配置文件
因为使用@anction注解已经完成上述内容,所以struts配置文件中上述内容不需要可以删除
@Action(value=”/doLogin”,results={ @Result(name=”index”,type=”dispatcher”,location=”/index.jsp”), @Result(name=”login”,type=”redirect”,location=”/login.jsp”)})
相关文章推荐
- 基于Annotation注解整合SSH框架和基于XML文件配置Bean整合SSH框架
- SSM简单整合(Mybatis,Spring,SpringMVC,基于注解和xml文件配置)
- 简单的SSH整合(基于注解和xml文件的配置)
- 框架 day36 Spring3 入门,DI依赖注入,装配bean基于xml/注解, 整合Junit4,配置约束自动提示
- spring与hibernate整合配置基于Annotation注解方式管理实务
- Spring学习(13)--- 基于Java类的配置Bean 之 @Configuration & @Bean注解
- Spring基于注解的方式配置bean的实例
- Spring-基于注解的配置[02自动装载bean]
- Spring3与Hibernate4整合,Spring中配置Hibernate基于XML和annotation的sessionFactory方式。
- SSH框架---注解配置,bean注解、事物注解等
- SSH框架整合——基于XML配置文件
- 基于注解Spring MVC综合Hibernate(需要jar包,spring和Hibernate整合配置,springMVC组态,重定向,)批量删除
- SSH整合时,基于注解的事务管理的配置方式
- Spring4深入理解IOC&DI04----Bean配置方式(全类名,工厂方法,FactoryBean),配置形式(基于XML和注解),泛型依赖注入
- [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)
- Spring中基于配置XML与Annotation注解配置AOP
- Spring(二)基于注解的方式配置Bean
- Spring-基于注解的配置[01定义Bean+扫描Bean]
- spring注解基于Annotation的依赖注入配置笔记
- [Spring]基于注解的形式配置Bean