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即可。

你可能感兴趣的:(SpringMVC注解)