SpringMVC注解
2016-04-15 00:00
525 查看
摘要: SpringMVC注解
Java注解
@Override: 伪代码,用于Java中表示重写时检查重写方法格式正确性,也可以不写,不写@Override时如果重写类格式出错,编译器不会报错。
Spring MVC注解
@Controller :放在定义类的上一行,表示该类为控制器即MVC中的C-控制层,另可写为@Controller(value="UserAction") 表示使用value的值作为bean的名字,如果不写value则使用首字母小写的类名作为bean。
最好按规范命名:类名 xxxController
将类名前加上该注解,当spring启动或者web服务启动spring会自动扫描所有包,@Controller作用就是告诉服务器这个类是MVC中的C,这个类可以接收用户请求、处理用户请求。
@Scope:放在@Controller注解的下一行和定义类的上一行,用来定义该类的请求模式(prototype 原型,singleton 单例)。当Scope的值为prototype 原型时每个请求都会有一个独立的Action来处理,spring默认Scope是singleton单例模式即每次访问都是同一个Action对象。
@controller与@Scope例:
@Resource:当需要在某个类中定义一个成员变量,并且该变量是一个已存在的bean,要为该变量赋值或注入时在该属性上一行使用@Resource(name="xxx"),相当于为该变量注入一个名称为xxx的bean。
@Service:放在定义类的上一行,表示该类为业务层Bean,可以写成@Service("userService")表示bean的名字必须叫userService
@Service与@Resource例:
定义:
使用:
说明(控制反转最好实例):
在Action声明的“userService”变量的类型必须是“UserServiceImpl”或者是其父类“UserService”,否则由于类型不一致而无法注入,
由于Action中的声明的“userService”变量使用了@Resource注解去标注,并且指明了其name = "userService",这就等于告诉Spring,说我Action要实例化一个“userService”,你Spring快点帮我实例化好,然后给我,
当Spring看到userService变量上的@Resource的注解时,根据其指明的name属性可以知道,Action中需要用到一个UserServiceImpl的实例,此时Spring就会把自己创建好的名字叫做"userService"的UserServiceImpl的实例注入给Action中的“userService”变量,帮助Action完成userService的实例化,这样在Action中就不用通过“UserService userService = new UserServiceImpl();”这种最原始的方式去实例化userService了。
如果没有Spring,那么当Action需要使用UserServiceImpl时,必须通过“UserService userService = new UserServiceImpl();”主动去创建实例对象,
但使用了Spring之后,Action要使用UserServiceImpl时,就不用主动去创建UserServiceImpl的实例了,创建UserServiceImpl实例已经交给Spring来做了,Spring把创建好的UserServiceImpl实例给Action,Action拿到就可以直接用了。
Action由原来的主动创建UserServiceImpl实例后就可以马上使用,变成了被动等待由Spring创建好UserServiceImpl实例之后再注入给Action,Action才能够使用。这说明Action对“UserServiceImpl”类的“控制权”已经被“反转”了,原来主动权在自己手上,自己要使用“UserServiceImpl”类的实例,自己主动去new一个出来马上就可以使用了,但现在自己不能主动去new“UserServiceImpl”类的实例,new“UserServiceImpl”类的实例的权力已经被Spring拿走了,只有Spring才能够new“UserServiceImpl”类的实例,而Action只能等Spring创建好“UserServiceImpl”类的实例后,再“恳求”Spring把创建好的“UserServiceImpl”类的实例给他,这样他才能够使用“UserServiceImpl”,这就是Spring核心思想“控制反转”,也叫“依赖注入”,“依赖注入”也很好理解,Action需要使用UserServiceImpl干活,那么就是对UserServiceImpl产生了依赖,Spring把Acion需要依赖的UserServiceImpl注入(也就是“给”)给Action,这就是所谓的“依赖注入”。对Action而言,Action依赖什么东西,就请求Spring注入给他,对Spring而言,Action需要什么,Spring就主动注入给他。
@Repository:放在定义类的上一行,对应数据访问层Bean。
@Repository与@Resource实例:
定义:
使用:
说明:
@Repository(value="userDao")注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。
当Service需要使用Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使用@Resource(name = "userDao")注解告诉Spring,Spring把创建好的userDao注入给Service即可。
Java注解
@Override: 伪代码,用于Java中表示重写时检查重写方法格式正确性,也可以不写,不写@Override时如果重写类格式出错,编译器不会报错。
Spring MVC注解
@Controller :放在定义类的上一行,表示该类为控制器即MVC中的C-控制层,另可写为@Controller(value="UserAction") 表示使用value的值作为bean的名字,如果不写value则使用首字母小写的类名作为bean。
最好按规范命名:类名 xxxController
将类名前加上该注解,当spring启动或者web服务启动spring会自动扫描所有包,@Controller作用就是告诉服务器这个类是MVC中的C,这个类可以接收用户请求、处理用户请求。
@Scope:放在@Controller注解的下一行和定义类的上一行,用来定义该类的请求模式(prototype 原型,singleton 单例)。当Scope的值为prototype 原型时每个请求都会有一个独立的Action来处理,spring默认Scope是singleton单例模式即每次访问都是同一个Action对象。
@controller与@Scope例:
@Controller @Scope("prototype") public class UserAction extends BaseAction<User>{ …… }
@Resource:当需要在某个类中定义一个成员变量,并且该变量是一个已存在的bean,要为该变量赋值或注入时在该属性上一行使用@Resource(name="xxx"),相当于为该变量注入一个名称为xxx的bean。
@Service:放在定义类的上一行,表示该类为业务层Bean,可以写成@Service("userService")表示bean的名字必须叫userService
@Service与@Resource例:
定义:
@Service("userService") public class UserServiceImpl implements UserService { ……… }
使用:
// 注入userService @Resource(name = "userService") private UserService userService;
说明(控制反转最好实例):
在Action声明的“userService”变量的类型必须是“UserServiceImpl”或者是其父类“UserService”,否则由于类型不一致而无法注入,
由于Action中的声明的“userService”变量使用了@Resource注解去标注,并且指明了其name = "userService",这就等于告诉Spring,说我Action要实例化一个“userService”,你Spring快点帮我实例化好,然后给我,
当Spring看到userService变量上的@Resource的注解时,根据其指明的name属性可以知道,Action中需要用到一个UserServiceImpl的实例,此时Spring就会把自己创建好的名字叫做"userService"的UserServiceImpl的实例注入给Action中的“userService”变量,帮助Action完成userService的实例化,这样在Action中就不用通过“UserService userService = new UserServiceImpl();”这种最原始的方式去实例化userService了。
如果没有Spring,那么当Action需要使用UserServiceImpl时,必须通过“UserService userService = new UserServiceImpl();”主动去创建实例对象,
但使用了Spring之后,Action要使用UserServiceImpl时,就不用主动去创建UserServiceImpl的实例了,创建UserServiceImpl实例已经交给Spring来做了,Spring把创建好的UserServiceImpl实例给Action,Action拿到就可以直接用了。
Action由原来的主动创建UserServiceImpl实例后就可以马上使用,变成了被动等待由Spring创建好UserServiceImpl实例之后再注入给Action,Action才能够使用。这说明Action对“UserServiceImpl”类的“控制权”已经被“反转”了,原来主动权在自己手上,自己要使用“UserServiceImpl”类的实例,自己主动去new一个出来马上就可以使用了,但现在自己不能主动去new“UserServiceImpl”类的实例,new“UserServiceImpl”类的实例的权力已经被Spring拿走了,只有Spring才能够new“UserServiceImpl”类的实例,而Action只能等Spring创建好“UserServiceImpl”类的实例后,再“恳求”Spring把创建好的“UserServiceImpl”类的实例给他,这样他才能够使用“UserServiceImpl”,这就是Spring核心思想“控制反转”,也叫“依赖注入”,“依赖注入”也很好理解,Action需要使用UserServiceImpl干活,那么就是对UserServiceImpl产生了依赖,Spring把Acion需要依赖的UserServiceImpl注入(也就是“给”)给Action,这就是所谓的“依赖注入”。对Action而言,Action依赖什么东西,就请求Spring注入给他,对Spring而言,Action需要什么,Spring就主动注入给他。
@Repository:放在定义类的上一行,对应数据访问层Bean。
@Repository与@Resource实例:
定义:
@Repository(value="userDao") public class UserDaoImpl extends BaseDaoImpl<User> { ……… }
使用:
// 注入userDao,从数据库中根据用户Id取出指定用户时需要用到 @Resource(name = "userDao") private BaseDao<User> userDao;
说明:
@Repository(value="userDao")注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。
当Service需要使用Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使用@Resource(name = "userDao")注解告诉Spring,Spring把创建好的userDao注入给Service即可。
相关文章推荐
- Spring MVC控制流程与简易配置方案
- JAVA——构造方法
- JAVA——接口
- java反射详解
- java 学习笔记
- 轻松带你走进shiro的世界
- JAVA为什么会空指针异常
- Java 密码扩展无限制权限策略文件
- 关闭Eclipse的控制台console自动跳出
- Java入门 第二季第三章 继承
- springmvc spring mybatis 添加ehcache
- 使用JDK8新特性重构你的代码
- 【LeetCode】299 Bulls and Cows (java实现)
- eclipse项目build时,提示错误.
- spring中自定义注解(annotation)与AOP中获取注解
- 最明白的JAVA——回调机制
- springmvc基础流程
- <java API源码初体验>2---collection集合之LinkedList原理分析
- [置顶] Android Studio或者Eclipse中的最常用的快捷键,最简单的,部分不适用eclipse
- 【转载】Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)