码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC注解控制器详解

时间:2015-04-21 13:07:06      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:component   repository   service   controller   springmvc   

主要包括四类:@Component、@Repository @Service、@Controller


说明:

  @Controller 控制层,就是我们的action层
  @Service 业务逻辑层,就是我们的service或者manager层
  @Repository 持久层,就是我们常说的DAO层
  @Component (字面意思就是组件),它在你确定不了事哪一个层的时候使用。
其实,这四个注解的效果都是一样的,Spring都会把它们当做需要注入的Bean加载在上下文中;但是在项目中,却建议你严格按照除Componen的其余三个注解的含义使用在项目中。这对分层结构的web架构很有好处。

  

示例:

1. 控制层
  @Controller // 注释为controller
  @Scope("prototype")
  public class LoginAction {
   @Autowired
   @Qualifier("userService") //注释指定注入 Bean
   private IUserService userService;
@RequestMapping(value = "/login/{username}", method = RequestMethod.GET)     
    public ModelAndView myMethod(HttpServletRequest request, HttpServletResponse response,       
@PathVariable("username") String username, ModelMap modelMap) throws Exception {    
        modelMap.put("loginuser", username);  
        return new ModelAndView("/login", modelMap);  
    }     
      
      @RequestMapping(value = "/welcome", method = RequestMethod.GET)    
        public String registPost(User user) {    
          return "/welcome";  
        }    
  }


参数:
userName=xxx&password=yyy  
----------------
class User{  
    private String userName;  
    private String password;  
}


(1)LoginAction使用了@Scope注解,@Scope("prototype")表示将Action的范围声明为原型,可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。spring 默认scope 是单例模式(scope="singleton"),这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全,struts2 是要求每次次访问都对应不同的Action,scope="prototype" 可以保证当有请求的时候都创建一个Action对象。
(2)@PathVariable("user") String user是url中变量的获取。
(3)常用注解@Controller、@RequestMapping、@RequestParam、@PathVariable、@CookieValue
(4)常见的参数类型
1).HttpServletRequest、HttpServletResponse或HttpSession。
2).添加了@RequestParam注解的任意类型的请求参数
3).添加了@ModelAttribute注解的任意类型的模型属性
4).任意类型的命令对象,供Spring绑定请求参数
5).Map或者ModelMap,供处理程序方法向模型添加属性
6).Errors或者BindingResult,让处理程序方法访问命令对象的绑定和验证结果
7).SessionStatus,让处理程序方法发出会话处理已经完成的通知
(5)常见的返回值类型
处理程序方法的返回类型可以是ModelAndView、Model、Map、String、void


2. 业务逻辑层
  @Service("userService")
  public class UserServiceImpl implements IUserService {
   @Autowired
   @Qualifier("userDao")
   private IUserDao userDao;
   ...
  }
(1)@Autowired暴露的required属性,这是承担着依赖性检查任务的重要属性。默认时,凡是应用了@Autowired注解的属性和方法都必须找到合适的协作者,否则DI容器会抛出异常,通过调整required属性取值能够改变这一行为,当@Autowired注解的required属性设置为false时,即使未找到合适的协作者,异常都始终不会被抛出。
(2)@Autowired注解能够作用于构建器、属性、方法。这里的方法不局限于设值方法,即setter方法,常见的各种方法都可以应用这一注解。


3. 持久层
  @Repository("userDao")
  public class UserDaoImpl implements IUserDao {
   private static Logger logger = LoggerFactory.getLogger(UserDaoImpl.class);
   private DataSource dataSource;
   private JdbcTemplate template;
   @Autowired
   public UserDaoImpl(DataSource dataSource){
   this.dataSource= dataSource;
   template = new JdbcTemplate(this.dataSource);
  }


4. 持久层
  @Component("component")    
  public class TestCompoment {    
    @Autowired    
    private ApplicationContext ctx;    
    public ApplicationContext getCtx() {    
        return ctx;    
    }    
}    
(1)在类上使用@Component注解,表示该类定义为Spring管理Bean,使用默认value(可选)属性表示Bean标识符。
(2)这是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。



SpringMVC注解控制器详解

标签:component   repository   service   controller   springmvc   

原文地址:http://blog.csdn.net/undoner/article/details/45168039

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!