最简单的ssh框架搭建:spring4+struts2+hibernate5。使用部分注解(常用的几个注解)

前一篇写了没有使用注解的方式:https://blog.csdn.net/Handsome2013/article/details/86301083

这一篇是有部分需要使用注解:这个是在上一篇的基础上写的。

改变1:在dao层的SSHDaoImpl.java上添加了注释@Repository

package cqupt.ssh.daoImpl;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import org.springframework.stereotype.Repository;

import cqupt.ssh.dao.SSHDao;
import cqupt.ssh.entity.Students;
import cqupt.ssh.utils.HibernateUtils;
@Repository
public class SSHDaoImpl implements SSHDao {

	@Override
	public List<Students> getStudents() {
		// 1获得session
		Session session = HibernateUtils.openSession();
		// 2控制事务
		Transaction tx = session.beginTransaction();
		// 3.执行操作
		// 书写hql
		String hql = "from Students";
		Query query = session.createQuery(hql);
		List<Students> list = query.list();
//		System.out.println(list);
		// 4.提交事务,关闭资源
		tx.commit();
		session.close();
		return list;
	}

}

改变二:在service层:在SSHServiceImpl中多注释:@Service       下边在引入dao的时候使用了注解@Autowired,就不需要写set方法 了

package cqupt.ssh.serviceImpl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cqupt.ssh.dao.SSHDao;
import cqupt.ssh.entity.Students;
import cqupt.ssh.service.SSHService;
@Service
public class SSHServiceImpl implements SSHService {
	@Autowired
	private SSHDao sSHDao ;
	
	@Override
	public List<Students> getStudents() {
		// TODO Auto-generated method stub
		return sSHDao.getStudents();
	}

}

改变3:在action层,在SSHAction.java上使用了注解@Controller        引入service的时候,就使用注释@Autowired同时省略了set方法。

package cqupt.ssh.action;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;

import cqupt.ssh.entity.Students;
import cqupt.ssh.service.SSHService;

@Controller
public class SSHAction {
	@Autowired
	private SSHService sSHService ;
	

	public String getStudents() {
		List<Students> list = sSHService.getStudents();
		/*通过ActionContext.getContext().put("message",message);
		 * 直接放入将数据request域中,不获取request本身,获取其 中的Map;*/
		ActionContext.getContext().put("message", list.get(0).getS_name());
		return "success";//根据这个返回的”success"到struts配置中可以找到对应的页面。

	}
}

改变4,在于配置applicationContext.xml上的变化:使用扫描注解方式。就省去了之前直接写bean的形式。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context  
                http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<!-- 由于在三层中使用了注解,所以需要扫描,去找到那些注解 -->
	<context:component-scan base-package="cqupt.ssh"></context:component-scan>
	

</beans>

其他就是完全一样,然后运行,访问,结果一样。

注意事项:开始的时候也是报错,是因为配置上缺少东西,报错如下: 元素 "context:component-scan" 的前缀 "context" 未绑定。

是自动装配与扫描有问题,了context的命名空间的问题

解决方式:添加点命名空间部分东西:

在xmlns后添加:

context="http://www.springframework.org/schema/context"

以及: 在xsi:中添加:

http://www.springframework.org/schema/context  
http://www.springframework.org/schema/context/spring-context-2.5.xsd

猜你喜欢

转载自blog.csdn.net/Handsome2013/article/details/86317473