spring springMVC中常用注解解析

网友投稿 262 2023-01-31


spring springMVC中常用注解解析

一,使用注解:

在spring的配置文件applicationContext.xml中,加入注解扫描。配置项就配置了对指定的包进行扫描,以实现依赖注入。

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xmlns:context="http://springframework.org/schema/context"

xmlns:aop="http://springframework.org/schema/aop"

xsi:schemaLocation="

http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans-3.0.xsd

http://springframework.org/schema/context http://springframework.org/schema/context/spring-context-3.0.xsd

http://springframework.org/schema/aop hthttp://tp://springframework.org/schema/aop/spring-aop-3.0.xsd

http://springframework.org/schema/util http://springframework.org/schema/util/spring-util-3.0.xsd">

//去哪扫描

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xmlns:context="http://springframework.org/schema/context"

xmlns:aop="http://springframework.org/schema/aop"

xsi:schemaLocation="

http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans-3.0.xsd

http://springframework.org/schema/context http://springframework.org/schema/context/spring-context-3.0.xsd

http://springframework.org/schema/aop hthttp://tp://springframework.org/schema/aop/spring-aop-3.0.xsd

http://springframework.org/schema/util http://springframework.org/schema/util/spring-util-3.0.xsd">

//去哪扫描

二,常见注解:

@Controller

@Service

@Autowired

@RequestMapping

@RequestParam

@ModelAttribute

@Cacheable

@CacheFlush

@Resource

@PostConstruct

@PreDestroy

@Repository

@Component (不推荐使用)

@Scope

@SessionAttributes

@InitBinder

@Required

@Qualifier

三,常用spring注解:

@Controller(运用于表现层)

使用@Controller注解标识UserAction之后,就表示要把UserAction交给Spring容器管理,在Spring容器中会存在一个名字为"userAction"的action,这个名字是根据UserAction类名来取的。注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名首字母小写,如果指定value【@Controller(value="UserAction")】或者【@Controller("UserAction")】,则使用value作为bean的名字。

这里的UserAction还使用了@Scope注解,@Scope("prototype")表示将Action的范围声明为原型,可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。spring 默认scope是单例模式(scope="singleton"),这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全,struts2 是要求每次次访问都对应不同的Action,scope="prototype" 可以保证当有请求的时候都创建一个Action对象

@Controller

@Scope("prototype")

public class UserAction extends BaseAction{

}

@ Service(运用于业务逻辑层)

注意,@service注解是在服务接口的实现类下,而不是接口中使用。

这里很好的体现了spring中的控制反转,我们不在让对象自己去实例化对象,去主动依赖对象,而是 专门用一个容器来创建对象,由IOC进行管理。实例:

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就主动注入给他。

@Service("userService")

public class UserServiceImpl implements UserService {

}

@ Repository(运用于数据管理层)

笔者是使用工具反向生成的实体层数据Model跟mapper,所以也没用到这个注解,不过这个就是简单的向spring容器中注入一个Bean

@Repository(value="userDao")

public class UserDaoImpl extends BaseDaoImpl {

}

四,常用springMVC注解:

@Autowired(按类型注入)

对类成员变量、方法及构造函数进行标注,完成自动装配的工作。简单来说就是调用Bean,告诉spring这个存在与被管理的容器中。

@Autowired 根据bean 类型从spring 上线文中进行查找,注册类型必须唯一,否则报异常

@Autowired 标注作用于 Map 类型时,如果 Map 的 key 为 String 类型,则 Spring 会将容器中所有类型符合 Map 的 value 对应的类型的 Bean 增加进来,用 Bean 的 id 或 name 作为 Map 的 key。

@Autowired 还有一个作用就是,如果将其标注在 BeanFactory 类型、ApplicationContext 类型、ResourceLoader 类型、ApplicationEventPublisher 类型、MessageSource 类型上,那么 Spring 会自动注入这些实现类的实例,不需要额外的操作。

@Autowired

private IReportService reportService ;

@Resource(按名称注入)

跟@Autowired类似,@Resource 默认按bean的name进行查找,如果没有找到会按type进行查找

@Resource

private DataSource dataSource; // inject the bean named 'dataSource'

@Resource(name="dataSource")

@Resource(type=DataSource.class)

延伸问题:什么是按类型进行装配,什么是按名称进行装配?

所谓按类型,就是当Spring容器中存在一个与指定属性类型相同的bean,那么将该属性进行自动装配;如果存在多个该类型的bean,那么跑出异常,并指出不能使用按类型进行自动装配;如果没有找到匹配的bean,则什么事都不发生。

所谓按名称,即根据属性名进行自动装配,此项会检查Spring容器中与该属性名完全一致的的bean,进行自动装配。

@RequestMapping(映射请求地址)

用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

其中有六个属性,分别为:

1、 value, method;

value:     指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

method:  指定请求的method类型, GET、POST、PUT、DELETE等;

2、consumes,produces

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

3、params,headers

params: 指定request中必须包含某些参数值是,才让该方法处理。

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

@Controller

@RequestMapping("/bbtForum.do")

public class BbtForumController {

@RequestMapping(params = "method=listBoardTopic")

public String listBoardTopic(int topicId,User user) {}

}

@RequestMapping("/softpg/downSoftPg.do")

@RequestMapping(value="/softpg/ajaxLoadSoftId.do", method=RequestMethod.POST)

@RequestMapping(value="/osu/product/detail.do", params={"modify=false"}, method=RequestMethod.POST)

@RequestParam(获取请求参数的值)

比如我们在浏览器的访问地址是:localhost:8080/hello?id=1000,则拿到id的值,例如:

@RestController

public class HelloController {

@RequestMapping(value="/hello",method= RequestMethod.GET)

public String sayHello(@RequestParam("id") Integer id){

return "id:"+id;

}

}

@PathVaribale  (获取url中的数据)

@RestController

public class HelloController {

@RequestMapping(value="/hello/{id}",method= RequestMethod.GET)

public String sayHello(@PathVariable("id") Integer id){

return "id:"+id;

}

}

@ResponseBody(返回类型为json)

作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

总结

以上所述是给大家介绍的spring springMVC中常用注解解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:.vue文件 加scoped 样式不起作用的解决方法
下一篇:Android接入微信支付的方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~