前一篇写了没有使用注解的方式: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