首页 >

说一下spring常用的注解,并举例说明怎么用? – 网络|

快手分享qq空间视频怎么下载不了,公安网怎么连接,博睿创电子科技有限公司怎么样说一下spring常用的注解,并举例说明怎么用? - 网络|说一下spring常用的注解,并举例说明怎么用

下面将介绍常用的spring注解和Springmvc常用的注解。

@CompentScan

作用:在配置类上写@ComponentScan注解来进行包扫描,具体使用如下:

1、排除用法

①:排除用法excludeFilters(排除@Controller注解的,和UserService的)

②:包含用法includeFilters,注意,若使用包含的用法,需要把useDefaultFilters属性设置为false(true表示扫描全部的)

③@ComponentScan.Filtertype的类型

a)注解形式的FilterType.ANNOTATION@Controller@Service@Repository@Compent

b)指定类型的FilterType.ASSIGNABLE_TYPE@ComponentScan.Filter(type=

FilterType.ASSIGNABLE_TYPE,value={UserService.class})

c)aspectj类型的FilterType.ASPECTJ(不常用)

d)正则表达式的FilterType.REGEX(不常用)

e)自定义的FilterType.CUSTOM

①FilterType.CUSTOM自定义类型如何使用

@Scope

作用:配置Bean的作用域对象。

(1)在不指定@Scope的情况下,所有的bean都是单实例的bean,而且是饿汉加载(容器启动实例就创建好了)

(2)指定@Scope为prototype表示为多实例的,而且还是懒汉模式加载(IOC容器启动的时候,并不会创建对象,而是在第一次使用的时候才会创建)。

(3)@Scope指定的作用域方法取值

①singleton:单实例的(默认)

②prototype:多实例的

③request:同一次请求

④session:同一个会话级别

@Lazy

Bean的懒加载@Lazy(主要针对单实例的bean容器启动的时候,不创建对象,在第一次使用的时候才会创建)

@Bean

@Lazy

publicPersonperson(){

returnnewPerson();

}

@Controller

主要用在Controller,用于初始化Bean

@Service

主要用在Service,用于初始化Bean。

@Respository

用来标识持久层

@Component

泛指组件,当组件不好归类的时候,大家可以使用这个注解进行标注

@Bean

通过@Bean的方式来导入组件(实用于导入第三方组件的类)

@Value

通过@Value+@PropertySource来给组件赋值

@PropertySource

见@Value

@AutoWired

①优先使用byType,而后是byName

②在多个实现类的时候,byType的方式不再是唯一,而需要通过byName的方式注入,而这个name就是根据变量名来的。

③通过@Qualifier注解来指明使用哪一个实现类,实际上也是通过byName的方式实现。

//一个Dao

@Repository

publicclassUserDao{

}

@Service

publicclassUserService{

@Autowired

privateUserDaouserDao;

结论:

a:自动装配首先时按照类型进行装配,若在IOC容器中发现了多个相同类型的组件,那么就按照属性名称来进行装配

@Autowired

privateUserDaouserDao;

比如,偶容器中有二个XxxDao类型的组件一个叫userDao一个叫userDao2

那么大家通过@AutoWired来修饰的属性名称时userDao,那么拿就加载容器的userDao组件,若属性名称为

userDao2那么他就加载的时xxxDao2组件

b:假设大家需要指定特定的组件来进行装配,大家可以通过使用@Qualifier(“userDao”)来指定装配的组件

或者在配置类上的@Bean加上@Primary注解

@Autowired

@Qualifier(“userDao”)

privateUserDaouserDao2;

c:假设大家容器中即没有userDao和tuserDao2,那么在装配的时候就会抛出异常

Noqualifyingbeanoftype’com.xxx.UserDao’available

若大家想不抛异常,大家需要指定required为false的时候可以了

@Autowired(required=false)

@Qualifier(“userDao”)

privateUserDaouserDao2;

Qualifier

配合@AutoWired,通过@Qualifier注解来指明使用哪一个实现类,实际上也是通过byName的方式实现。

@Profile

通过@Profile注解来根据环境来激活标识不同的Bean

激活切换环境的方法

方法一:通过运行时jvm参数来切换-Dspring.profiles.active=test|dev|prod

方法二:通过代码的方式来激活

@RestController

是Controller的restful注解,自动添加@Controller和@ResponseBody注解。

@RequestMapping

通过`RequestMapping`注解可以定义不同的处理器映射规则。

①URL路径映射

@RequestMapping(value=”/item”)或@RequestMapping(“/item)

value的值是数组,可以将多个url映射到同一个方法

②窄化请求映射

在class上添加@RequestMapping(url)指定通用请求前缀,限制此类下的所有方法请求url必须以请求前缀为开头,通过此方法对url进行分类管理。

如下:

@RequestMapping放在类名上边,设置请求前缀

@Controller

@RequestMapping(“/item”)

方法名上边设置请求映射url:

@RequestMapping放在方法名上边,如下:

@RequestMapping(“/queryItem”)

访问地址为/item/queryItem

③请求方法限定

@RequestMapping(method=RequestMethod.GET)

@RequestMapping(value=”/editItem”,method=RequestMethod.GET)

@RequestMapping(method={RequestMethod.GET,RequestMethod.POST})

@RequestParam

`@RequestParam`用于绑定单个请求参数。

-value:参数名字,即入参的请求参数名字,如value=”item_id”表示请求的参数区中的名字为item_id的参数值将传入。

-required:是否必须,默认为true,表示请求中一定要有相应的参数,否则将报错。

`

TTPStatus400-RequiredIntegerparameter’XXXX’isnotpresent

`

-defaultValue:默认值,表示如果请求中没有同名参数时的默认值。

定义如下:

publicStringeditItem(@RequestParam(value=”item_id”,required=true)Stringid){

}

形参名称为id,但是这里使用value=”item_id”限定请求的参数名为`item_id`,所以页面传递参数的名必须为`item_id`。

注意:如果请求参数中没有item_id将跑出异常:

`HTTPStatus500-RequiredIntegerparameter’item_id’isnotpresent`

这里通过required=true限定item_id参数为必需传递,如果不传递则报400错误,可以使用defaultvalue设置默认值,即使required=true也可以不传item_id参数值

@ModeAttribute

使用如下:

publicStringtest1(@ModelAttribute(“user”)Useruser)

只是此处多了一个注解@ModelAttribute(“user”),它的作用是将该绑定的命令对象以“user”为名称添加到模型对象中供视图页面展示使用。大家此时可以在视图页面使用${user.username}来获取绑定的命令对象的属性。

如请求参数包含“?username=zhang&password=123自动绑定到user中的username和password属性中。

@Resource

功能和@AutoWired的功能差不多一样,但是不支持@Primary和@Qualifier的支持

f:使用autowired可以标注在方法上

标注在set方法上

//@Autowired

publicvoidsetUserDao(UserDaouserDao){

this.userDao=userDao;

}“`

标注在构造方法上

@Autowired

publicUserService(UserDaouserDao){

this.userDao=userDao;

}

标注在配置类上的入参中(可以不写)

@Bean

publicUserServucegetUserService(@AutowiredUserDaouserDao){

UserServuceuserService=newUserServuce(userDao);

returnuserService;

}

@PostConstruct和@PreDestroy

@PostConstruct:在bean创建完成并且属性赋值完成;来执行初始化方法@PreDestroy:在容器销毁bean之前通知大家进行清理工作。

@Import

1、通过@Import来导入组件(导入组件的id为全类名路径)

2、通过@Import的ImportSeletor类实现组件的导入(导入组件的id为全类名路径)

3、通过@Import的ImportBeanDefinitionRegister导入组件(可以指定bean的名称)

@RequestBody

作用:

@RequestBody`注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter`接口将读到的内容转换为`json、xml`等格式的数据并绑定到`controller`方法的参数上。

本例子应用:

`@RequestBody`注解实现接收http请求的json数据,将json数据转换为java对象

33、@ResponseBody

`作用:`

该注解用于将`Controller`的方法返回的对象,通过`HttpMessageConverter`接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端

`本例子应用:`

@ResponseBody注解实现将controller方法返回对象转换为json响应给客户端

34、@ModelAttribute

`@ModelAttribute`作用如下:

1、绑定请求参数到pojo并且暴露为模型数据传到视图页面

此方法可实现数据回显效果。

//商品修改提交

@RequestMapping(“/editItemSubmit”)

publicStringeditItemSubmit(@ModelAttribute(“item”)Itemsitems,Modelmo

页面:

如果不用`@ModelAttribute`可以使用`model.addAttribute(“item”,items)`完成数据回显。

2、将方法返回值暴露为模型数据传到视图页面

//商品分类

页面:

商品类型:

<selectname=”itemtype”>

<c:forEachitems=”${itemtypes}”var=”itemtype”>

<optionvalue=”${itemtype.key}”>${itemtype.value}</option>

</c:forEach>

</select>

@PathVariable

@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。

@RequestMapping(value=”/users/{userId}/topics/{topicId}”)

publicStringtest(

@PathVariable(value=”userId”)intuserId,

@PathVariable(value=”topicId”)inttopicId)

如请求的URL为“控制器URL/users/123/topics/456”,则自动将URL中模板变量{userId}和{topicId}绑定到通过@PathVariable注解的同名参数上,即入参后userId=123、topicId=456。代码在PathVariableTypeController中。

@ExceptionHandler

这种方式最大的缺陷就是不能全局控制异常。每个类都要写一遍。

@ControllerAdvice

上文说到@ExceptionHandler需要进行异常处理的方法必须与出错的方法在同一个Controller里面。那么当代码加入了@ControllerAdvice,则不需要必须在同一个controller中了。这也是Spring3.2带来的新特性。从名字上可以看出大体意思是控制器增强。也就是说,@controlleradvice+@ExceptionHandler也可以实现全局的异常捕捉。

如果@ExceptionHandler注解中未声明要处理的异常类型,则默认为参数列表中的异常类型。所以还可以写成这样:

@Transactional

1、@Transactional使用注意事项:

@Transactional只能被应用到public方法上,对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.

@Transactional可以作用与接口、接口方法、类以及类方法上,但是Spring建议大家不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。

2、@Transactional注解中常用参数说明

①readOnly

该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。例如:`@Transactional(readOnly=true)`

②rollbackFor

该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。例如:

指定单一异常类:`@Transactional(rollbackFor=RuntimeException.class)`

指定多个异常类:`@Transactional(rollbackFor={RuntimeException.class,Exception.class})`

③rollbackForClassName

该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。例如:

指定单一异常类名称:`@Transactional(rollbackForClassName=”RuntimeException”)`

指定多个异常类名称:`@Transactional(rollbackForClassName={“RuntimeException”,”Exception”})`

④noRollbackFor

该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。例如:

指定单一异常类:`@Transactional(noRollbackFor=RuntimeException.class)`

指定多个异常类:`@Transactional(noRollbackFor={RuntimeException.class,Exception.class})`

⑤noRollbackForClassName

该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。例如:

指定单一异常类名称:`@Transactional(noRollbackForClassName=”RuntimeException”)`

指定多个异常类名称:

`@Transactional(noRollbackForClassName={“RuntimeException”,”Exception”})`

⑥propagation

该属性用于设置事务的传播行为:

例如:`@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)`

⑦isolation

该属性用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置

⑧timeout

该属性用于设置事务的超时秒数,默认值为-1表示永不超时

@Configuration

`@Configuration`标记的类必须符合下面的要求:

-配置类必须以类的形式提供(不能是工厂方法返回的实例),允许通过生成子类在运行时增强(cglib动态代理)。

-配置类不能是`final`类(没法动态代理)。

-配置注解通常为了通过`@Bean`注解生成`Spring`容器管理的类,

-配置类必须是非本地的(即不能在方法中声明,不能是`private`)。

-任何嵌套配置类都必须声明为`static。`

-`@Bean`方法可能不会反过来创建进一步的配置类(也就是返回的bean如果带有`@Configuration`,也不会被特殊处理,只会作为普通的bean)。

①@Configuation加载配置spring并启动spring容器

②@Configuration启动容器+@Bean注册Bean,@Bean下管理bean的生命周期

③@Configuration启动容器+@Component注册Bean

④@Configuration总结

(1)@Configuration等价于<beans></beans>

(2)@Bean等价于<bean></bean>

(3)@CompnentScan等价于<context:component-scanbase-package=””/>

@AspectJ

@Aspect:作用是把当前类标识为一个切面供容器读取

@After

@After:final增强,不管是抛出异常或者正常退出都会执行

@Before

@Before:标识一个前置增强方法,相当于BeforeAdvice的功能

@Around

@Around:环绕增强,相当于MethodInterceptor

@PointCut

配置切点表达式:

@RequestParam

`@RequestParam`用于绑定单个请求参数。

-value:参数名字,即入参的请求参数名字,如value=”item_id”表示请求的参数区中的名字为item_id的参数值将传入。

-required:是否必须,默认为true,表示请求中一定要有相应的参数,否则将报错。

`

TTPStatus400-RequiredIntegerparameter’XXXX’isnotpresent

`

-defaultValue:默认值,表示如果请求中没有同名参数时的默认值。

定义如下:

publicStringeditItem(@RequestParam(value=”item_id”,required=true)Stringid){}

形参名称为id,但是这里使用value=”item_id”限定请求的参数名为`item_id`,所以页面传递参数的名必须为`item_id`。

注意:如果请求参数中没有item_id将跑出异常:

`HTTPStatus500-RequiredIntegerparameter’item_id’isnotpresent`

这里通过required=true限定item_id参数为必需传递,如果不传递则报400错误,可以使用defaultvalue设置默认值,即使required=true也可以不传item_id参数值


再次感谢邀请!后续@码农的一天,会提供更多的编码只是分享!!!


说一下spring常用的注解,并举例说明怎么用? - 网络|
  • C语言课程设计报告范文及详细步骤介绍 - 网络|
  • C语言课程设计报告范文及详细步骤介绍 - 网络| | C语言课程设计报告范文及详细步骤介绍 - 网络| ...

    说一下spring常用的注解,并举例说明怎么用? - 网络|
  • 键盘九九乘法口诀? - 网络|
  • 键盘九九乘法口诀? - 网络| | 键盘九九乘法口诀? - 网络| ...

    说一下spring常用的注解,并举例说明怎么用? - 网络|
  • C语言中如何输入字符串数组(详解字符指针和字符数组的区别) - 网络|
  • C语言中如何输入字符串数组(详解字符指针和字符数组的区别) - 网络| | C语言中如何输入字符串数组(详解字符指针和字符数组的区别) - 网络| ...