搭建一个ssh框架,struts2。好像是spring注入的问题。
架构层次就是action—>service—>dao—>model.我怀疑是spring注入问题。但是在测试类中,却得到了正确的结果。spring的注入我用的是标注\注释
java类:
[code=Java]
action层:
package spier001.action;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;
import org.springframework.stereotype.Component;import spier001.service.AdminService;import com.opensymphony.xwork2.ActionSupport;@Component
public class LoginAction extends ActionSupport implements ServletRequestAware{
private AdminService adminService;
private HttpSession session;
private String username;
private String password;
@Override
public String execute(){
if(username!=null && !username.equals("")
&& password!=null && !password.equals("")){
session.setAttribute("username", username);
session.setAttribute("password", password);
System.out.println(username);
System.out.println(password);
if(adminService==null)
System.out.println("注入失败!");
if( adminService.exist(username,password))//异常!!!!!!!!!
return SUCCESS;
}
return ERROR;
}
public void setServletRequest(HttpServletRequest arg0) {
session = arg0.getSession();
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public AdminService getAdminService() {
return adminService;
}
@Resource
public void setAdminService(AdminService adminService) {
this.adminService = adminService;
}}service层:
package spier001.service;import java.util.List;
public interface Service {
public void add(Object persistentInstance);
public void delete(Object persistentInstance);
public void update(Object persistentInstance);
public List query(int pageNum); //无条件的查询
public List query(int pageNum,Object persistentInstance); //将所有条件都封装在o中,没有输入的属性为空。
}package spier001.service;
import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;import spier001.dao.AdmininfoDAO;
import spier001.model.Admininfo;
@Transactional
@Component
public class AdminService implements Service { private AdmininfoDAO admininfoDAO; public AdmininfoDAO getAdmininfoDAO() {
return admininfoDAO;
}
@Resource
public void setAdmininfoDAO(AdmininfoDAO admininfoDAO) {
this.admininfoDAO = admininfoDAO;
} public void add(Object persistentInstance) {
// TODO Auto-generated method stub
admininfoDAO.save((Admininfo) persistentInstance);
} public void delete(Object persistentInstance) {
// TODO Auto-generated method stub
admininfoDAO.delete((Admininfo) persistentInstance);
} public List query(int pageNum) {
// TODO Auto-generated method stub
return null;
} public List query(int pageNum, Object persistentInstance) {
// TODO Auto-generated method stub
return null;
} public void update(Object persistentInstance) {
// TODO Auto-generated method stub } public boolean exist(String username,String password) {
List l = admininfoDAO.findByName(username);
if(l==null||l.isEmpty()){
System.out.println("没有这个名称 用户");
return false;
}
return true;
}}
架构层次就是action—>service—>dao—>model.我怀疑是spring注入问题。但是在测试类中,却得到了正确的结果。spring的注入我用的是标注\注释
java类:
[code=Java]
action层:
package spier001.action;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;
import org.springframework.stereotype.Component;import spier001.service.AdminService;import com.opensymphony.xwork2.ActionSupport;@Component
public class LoginAction extends ActionSupport implements ServletRequestAware{
private AdminService adminService;
private HttpSession session;
private String username;
private String password;
@Override
public String execute(){
if(username!=null && !username.equals("")
&& password!=null && !password.equals("")){
session.setAttribute("username", username);
session.setAttribute("password", password);
System.out.println(username);
System.out.println(password);
if(adminService==null)
System.out.println("注入失败!");
if( adminService.exist(username,password))//异常!!!!!!!!!
return SUCCESS;
}
return ERROR;
}
public void setServletRequest(HttpServletRequest arg0) {
session = arg0.getSession();
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public AdminService getAdminService() {
return adminService;
}
@Resource
public void setAdminService(AdminService adminService) {
this.adminService = adminService;
}}service层:
package spier001.service;import java.util.List;
public interface Service {
public void add(Object persistentInstance);
public void delete(Object persistentInstance);
public void update(Object persistentInstance);
public List query(int pageNum); //无条件的查询
public List query(int pageNum,Object persistentInstance); //将所有条件都封装在o中,没有输入的属性为空。
}package spier001.service;
import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;import spier001.dao.AdmininfoDAO;
import spier001.model.Admininfo;
@Transactional
@Component
public class AdminService implements Service { private AdmininfoDAO admininfoDAO; public AdmininfoDAO getAdmininfoDAO() {
return admininfoDAO;
}
@Resource
public void setAdmininfoDAO(AdmininfoDAO admininfoDAO) {
this.admininfoDAO = admininfoDAO;
} public void add(Object persistentInstance) {
// TODO Auto-generated method stub
admininfoDAO.save((Admininfo) persistentInstance);
} public void delete(Object persistentInstance) {
// TODO Auto-generated method stub
admininfoDAO.delete((Admininfo) persistentInstance);
} public List query(int pageNum) {
// TODO Auto-generated method stub
return null;
} public List query(int pageNum, Object persistentInstance) {
// TODO Auto-generated method stub
return null;
} public void update(Object persistentInstance) {
// TODO Auto-generated method stub } public boolean exist(String username,String password) {
List l = admininfoDAO.findByName(username);
if(l==null||l.isEmpty()){
System.out.println("没有这个名称 用户");
return false;
}
return true;
}}
dao层:
package spier001.dao;import java.util.List;import javax.annotation.Resource;
import org.hibernate.criterion.DetachedCriteria;import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Component;
import spier001.model.Admininfo;@Component
public class AdmininfoDAO {
private HibernateTemplate hibernateTemplate;
public void save(Admininfo transientInstance) {
hibernateTemplate.save(transientInstance);
} public void delete(Admininfo persistentInstance) {
hibernateTemplate.delete(persistentInstance);
} public void update(Admininfo persistentInstance){
hibernateTemplate.update(persistentInstance);
}
public List query(DetachedCriteria criteria,int firstResult,int maxResult){
List result = hibernateTemplate.findByCriteria(criteria, firstResult, maxResult);
return result;
}
public Admininfo findById(java.lang.String id) {
Admininfo instance = (Admininfo) getHibernateTemplate().get(
"spier001.model.Admininfo", id);
return instance;
} public List findByProperty(String propertyName, Object value) {
String queryString = "from Admininfo as model where model."
+ propertyName + "= ?";
return getHibernateTemplate().find(queryString, value);
} public List findByName(Object username) {
return findByProperty("aname", username);
} public List findAll() {
String queryString = "from Admininfo";
return hibernateTemplate.find(queryString);
}
public static AdmininfoDAO getFromApplicationContext(ApplicationContext ctx) {
return (AdmininfoDAO) ctx.getBean("admininfoDAO");
}
@Resource
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
} public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
}
model层:
package spier001.model;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;/**
* Admininfo entity. @author MyEclipse Persistence Tools
*/
@Entity
@Table(name = "admininfo", catalog = "posdb")
public class Admininfo implements java.io.Serializable { // Fields private String aid;
private String aname;
private String apwd;
private String alevel; // Constructors /** default constructor */
public Admininfo() {
} /** minimal constructor */
public Admininfo(String aname, String apwd) {
this.aname = aname;
this.apwd = apwd;
} /** full constructor */
public Admininfo(String aname, String apwd, String alevel) {
this.aname = aname;
this.apwd = apwd;
this.alevel = alevel;
} // Property accessors
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "Aid", unique = true, nullable = false, length = 20)
public String getAid() {
return this.aid;
} public void setAid(String aid) {
this.aid = aid;
} @Column(name = "Aname", nullable = false, length = 50)
public String getAname() {
return this.aname;
} public void setAname(String aname) {
this.aname = aname;
} @Column(name = "Apwd", nullable = false, length = 20)
public String getApwd() {
return this.apwd;
} public void setApwd(String apwd) {
this.apwd = apwd;
} @Column(name = "Alevel", length = 20)
public String getAlevel() {
return this.alevel;
} public void setAlevel(String alevel) {
this.alevel = alevel;
}}
测试类:
package spier001.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import spier001.model.Admininfo;
import spier001.service.AdminService;
public class springTest {
public static void main(String[] args){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
AdminService as = (AdminService)ac.getBean("adminService");
//Admininfo admin = new Admininfo("zrks","123456");
System.out.println("AdminService测试...\n\n");
System.out.println(as.getAdmininfoDAO().findById("10001").getAname());
}
}[/code]
hibernate配置文件:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration> <session-factory>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/posdb</property>
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="myeclipse.connection.profile">pos</property>
<property name="format_sql" >true</property> </session-factory></hibernate-configuration>
spring配置文件:
<?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:p="http://www.springframework.org/schema/p"
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-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<context:annotation-config/>
<context:component-scan base-package="spier001"></context:component-scan>
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
<property name="packagesToScan" value="spier001"></property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
</beans>
web.xml:<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>/login.jsp</welcome-file>
</welcome-file-list> <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>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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>
Service层托管一次!!!:<bean id="admininfoService" class="你业务层实现类地址">
<property name="admininfoDAO" ref="hibernateTemplate"></property>
</bean> 然后action在托管一次!:
<bean id="admininfoAction" class="你Action类地址">
<property name="adminService" ref="admininfoService"></property>
</bean>大概就这个样子!你先试试!
少<bean id="AdmininfoDAO" class="spier001.model.Admininfo.AdmininfoDAO">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
@component("name")写好了么
还有setAdminService上些@resource了没不过struts可以自动注入到spring中还有struts.xml中的class是否和action中的名字一致。
估计Action中没有注入哦!!在看看struts2.xml中有没有struts.ObjectFactory=spring还有一句好=type的那句话,在看看有没有struts2和spring整合的那个jar包有没有!!