您的位置:首页 > 编程语言 > Java开发

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例:

@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即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: