首页 >

说一下spring常用的注解 – java – 前端|

qq斗地主牌怎么变大,su root 认证失败是怎么回事,苹果6怎么删除连过wifi说一下spring常用的注解 - java - 前端|说一下spring常用的注解

谢谢邀请!

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

@CompentScan

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

1、排除用法

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

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

③ @ComponentScan.Filter type的类型

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

public Person person() {

return new Person();

}

@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

public class UserDao {

}

@Service

public class UserService {

@Autowired

private UserDao userDao;

结论:

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

@Autowired

private UserDao userDao;

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

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

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

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

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

@Autowired

@Qualifier(“userDao”)

private UserDao userDao2;

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

No qualifying bean of type ‘com.xxx.UserDao’ available

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

@Autowired(required = false)

@Qualifier(“userDao”)

private UserDao userDao2;

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,表示请求中一定要有相应的参数,否则将报错。

`

TTP Status 400 – Required Integer parameter ‘XXXX’ is not present

`

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

定义如下:

public String editItem(@RequestParam(value=”item_id”,required=true) String id) {

}

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

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

`HTTP Status 500 – Required Integer parameter ‘item_id’ is not present`

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

@ModeAttribute

使用如下:

public String test1(@ModelAttribute(“user”) User user)

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

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

@Resource

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

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

标注在set方法上

//@Autowired

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}“`

标注在构造方法上

@Autowired

public UserService(UserDao userDao) {

this.userDao = userDao;

}

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

@Bean

public UserServuce getUserService(@Autowired UserDao userDao) {

UserServuce userService = new UserServuce(userDao);

return userService;

}

@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”)

public String editItemSubmit(@ModelAttribute(“item”) Items items,Model mo

页面:

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

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

//商品分类

页面:

商品类型:

<select name=”itemtype”>

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

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

</c:forEach>

</select>

@PathVariable

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

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

public String test(

@PathVariable(value=”userId”) int userId,

@PathVariable(value=”topicId”) int topicId)

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

@ExceptionHandler

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

@ControllerAdvice

上文说到 @ ExceptionHandler 需要进行异常处理的方法必须与出错的方法在同一个Controller里面。那么当代码加入了 @ControllerAdvice,则不需要必须在同一个 controller 中了。这也是 Spring 3.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-scan base-package=””/>

@AspectJ

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

@After

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

@Before

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

@Around

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

@PointCut

配置切点表达式:

@RequestParam

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

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

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

`

TTP Status 400 – Required Integer parameter ‘XXXX’ is not present

`

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

定义如下:

public String editItem(@RequestParam(value=”item_id”,required=true) String id) { }

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

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

`HTTP Status 500 – Required Integer parameter ‘item_id’ is not present`

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

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

qq斗地主牌怎么变大,su root 认证失败是怎么回事,苹果6怎么删除连过wifi说一下spring常用的注解 - java - 前端|


说一下spring常用的注解 - java - 前端|
  • system文件是空的 - java - 前端|
  • system文件是空的 - java - 前端| | system文件是空的 - java - 前端| ...

    说一下spring常用的注解 - java - 前端|
  • C语言中如何用writefile将结构体写入文件 - java - 前端|
  • C语言中如何用writefile将结构体写入文件 - java - 前端| | C语言中如何用writefile将结构体写入文件 - java - 前端| ...

    说一下spring常用的注解 - java - 前端|
  • 男生学软件开发怎么样 - java - 前端|
  • 男生学软件开发怎么样 - java - 前端| | 男生学软件开发怎么样 - java - 前端| ...