新建好package
在Java Resources -》src下新建出如下package: ? com.jsdz.action --action ? com.jsdz.dao--数据库访问
? com.jsdz.exception--自定义异常 ? com.jsdz.interceptor--拦截器 ? com.jsdz.model--模型对象
? com.jsdz.service --业务接口
? com.jsdz.service.impl--业务接口实现 ? com.jsdz.test --测试目录 ? com.jsdz.util --工具类
? com.jsdz.xml--mybatis映射XML
在applicationContext.xml中添加组件注入选项
这里配置成spring中注解+自动扫描方式,相对XML文件配置简化得多。 @Repository:DAO层组件,@Service:业务层组件,@Controller:控制层组件
xmlns:jdbc=\ xmlns:context=\ xsi:schemaLocation=\ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd\> 将action的创建托管给spring容器 修改LoginAction.java代码,添加注解,使之能够被spring自动创建。 packagecom.jsdz.action; importorg.springframework.context.annotation.Scope; importorg.springframework.stereotype.Controller; import com.opensymphony.xwork2.ActionSupport; @Scope(\) @Controller(\) publicclassLoginActionextendsActionSupport { private String username ; private String password ; @Override public String execute() throws Exception { System.out.println(\); if(username.equals(\) &&password.equals(\) ) { System.out.println(\); returnSUCCESS; } else { System.out.println(\); returnINPUT ; } } public String getUsername() { returnusername; } publicvoidsetUsername(String username) { this.username = username; } public String getPassword() { returnpassword; } publicvoidsetPassword(String password) { this.password = password; } } 修改struts.xml配置文件,使action的创建托管给spring。 到此可以做两种测试: 1) 去掉LoginAction.java中的注解,验证spring是否能创建对象实例; 2) 修改LoginAction.java中注解的命名,验证login.jsp是否能访问到对应的action 验证业务组件的自动注入 1. 创建业务组件接口以及两个实现类:LoginService、LoginServiceImpl,LoginServiceImpl2 在action中不再自己负责逻辑判断,提交给LoginService来处理业务。这里创建两个实现类主要是验证当有多个实现类时如何选择注入。 LoginService.java packagecom.jsdz.service; import … @Scope(\) @Service(\) publicinterfaceLoginService { booleanIsLogin(String userName,StringpassWord ) ; } 由于这个业务类中不包含任何成员变量,属于无状态类,因此可以定义创建为单实例。 LoginServiceImpl.java packagecom.jsdz.service.impl; import … @Scope(\) @Service(\) publicclassLoginServiceImplimplementsLoginService { @Override publicbooleanIsLogin(String userName, String passWord) { System.out.println(\); if(userName.equals(\) &&passWord.equals(\)) returntrue; returnfalse; } } LoginServiceImpl2.java packagecom.jsdz.service.impl; import… @Scope(\) @Service(\) publicclass LoginServiceImpl2 implementsLoginService { @Override publicbooleanIsLogin(String userName, String passWord) { System.out.println(\); if(userName.equals(\) &&passWord.equals(\)) returntrue; returnfalse; } } 修改LoginAction.java packagecom.jsdz.action; …. @Scope(\) @Controller(\) publicclassLoginActionextendsActionSupport { private String username ; private String password ; @Autowired @Qualifier(\) privateLoginServiceloginService ; @Override public String execute() throws Exception { System.out.println(\); //if(username.equals(\ if(loginService.IsLogin(username, password)) { System.out.println(\); returnSUCCESS; } else { System.out.println(\); returnINPUT ; }