美文网首页
SpringMVC 注解类

SpringMVC 注解类

作者: 常义 | 来源:发表于2018-05-04 15:19 被阅读20次
    • @RequestMapping注解,DispatcherServlet找到控制器并把请求分发到控制器

    类定义处: 表示类中的所有响应请求的方法都是以该地址作为父路径
    方法定义处:提供进一步的细分映射信息。 相对于类定义处的 URL
    如果类上没有映射,那么url直接就是方法的映射;否则url为类上+方法上映射路径组合

    @Controller
    @RequestMapping("user") //类级别,可以不需要,如果要了,下面所有的请求路径前都需要加入 /user
    public class LoginController {
        //处理用户请求
        @RequestMapping(value = "/login") //方法级别,必须有,决定这个方法处理哪个请求
        public String doLogin() {
            //此处省略处理逻辑
            return "WEB-INF/page/login.jsp";
        }
        //处理用户退出登录请求
        @RequestMapping("/logout") //方法级别,必须有,决定这个方法处理哪个请求
        public String doLogout() {
            //此处省略处理逻辑
            return "WEB-INF/page/index.jsp";
        }
    }
    

    下面这四大注解都是类级别的,可以不带任何参数,也可以带一个参数,代表bean名字,在进行注入的时候就可以通过名字进行注入了
    • @Controller 注解定义控制器
    • @Service 注解定义业务处理类
    • @Repository 注解定义底层数据库处理接口
    • @Component 是通用标注,在不清楚使用那个注解的时候,可以统统使用Component

    当在spring中配置了<context:annotation-config/> 和<context:component-scan base-package="*">时,上述四种注解的组件都会由spring容器来创建为bean并由自己来管理.那么创建了上面这些组件后,又是如何来注入的呢,这时就由@autowired来配置了。只需要在private的属性上加上@autowired就可以自动把接口属性的实现类的bean注入,注意不需要setter,getter方法

    @Service、@Repository注解是放到service或者dao类的实现类还是接口类中? 
    答案:要将@Service和@Repository放到实现类上面而不是接口类上面,接口只是一个规范,需要各种实现类去实现这个接口,我们要用的就是这些实用类的方法
    

    • @Transactional 注解管理事务

    1.不要在接口上声明@Transactional ,而要在具体类的方法上使用 @Transactional 注解,否则注解可能无效。
    2.不要图省事,将@Transactional放置在类级的声明中,放在类声明,会使得所有方法都有事务。故@Transactional应该放在方法级别,不需要使用事务的方法,就不要放置事务,比如查询方法。否则对性能是有影响的。
    3.使用了@Transactional的方法,对同一个类里面的方法调用, @Transactional无效。比如有一个类Test,它的一个方法A,A再调用Test本类的方法B(不管B是否public还是private),但A没有声明注解事务,而B有。则外部调用A之后,B的事务是不会起作用的。(经常在这里出错)
    4.使用了@Transactional的方法,只能是public,@Transactional注解的方法都是被外部其他类调用才有效,故只能是public。道理和上面的有关联。故在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错,但事务无效。

    相关文章

      网友评论

          本文标题:SpringMVC 注解类

          本文链接:https://www.haomeiwen.com/subject/hrbdrftx.html