1、Spring Bean类的注解
1.1 @Component
通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
1.2 @Repository
对应持久层即 Dao 层,主要用于数据库相关操作。
1.3 @Service
对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
1.4 @Controller
对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。
1.5@RestController
@RestController = @Controller + @ResponseBody
写这一个注解就相当于写了后面的两个注解,在返回值是json串的非常方便,但同时也会有一个问题,加了这个注解就不能返回jsp或者html页面,这时可以通过返回视图数据的方式来返回页面。
ModelAndView mv = new ModelAndView("index");
return mv;
1.6 @Configuration
一般用来声明配置类。
指示一个类声明一个或多个@Bean方法,并且可以由Spring容器处理,以便在运行时为这些bean生成BeanDefinition和服务请求。
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
// instantiate, configure and return bean ...
}
}
注意:
1.@Configuration不可以是final类型;
2.@Configuration不可以是匿名类;
3.嵌套的configuration必须是静态类。
2、注入数据注解
2.1 @Autowired
自动按照类型注入,只要容器中有唯一一个 bean 对象类型和要注入的变量类型匹配,就可以注入成功。
如果有多个类型匹配,先匹配类型,然后根据变量名称去对应,如果变量名称和 bean 名称相同,就注入。
2.2 @Resource
byName就是变量名去匹配bean的id属性,而byType则是变量类型去匹配bean的class属性。
<bean id="userService" class="com.test.UserServiceImpl">
</bean>
@Autowired和@Resource的区别:
- @Autowired注解是Spring提供的,而@Resource注解是J2EE本身提供的;
- @Autowird注解默认通过byType方式注入,而@Resource注解默认通过byName方式注入;
- @Autowired注解注入的对象需要在IOC容器中存在,否则需要加上属性required=false,表示忽略当 前要注入的bean,如果有直接注入,没有跳过,不会报错。
2.3 @Value
用于注入基本类型和 String 类型的数据。
3、请求常用注解
3.1 @RequestMapping
它用于映射客户端的访问地址,可以被应用于类和方法上面。
可以指定请求的类型get,post,put,delete
@Controller
@RequestMapping("/index")
public class HelloWorldController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return "/WEB-INF/views/success.jsp";
}
@RequestMapping(value = "/world", method = RequestMethod.POST)
public String world() {
return "/WEB-INF/views/success.jsp";
}
}
@RequestMapping 还可以将多个请求映射到一个方法上,只需要给 value 来指定一个包含多个路径的列表。
@Controller
@RequestMapping("/index")
public class HelloWorldController {
@RequestMapping(value = {"/hello", "/world", "/helloworld"})
public String hello() {
return "/WEB-INF/views/success.jsp";
}
}
3.2 @GetMapping
等价于@RequestMapping(value="",method=RequestMethod.GET)
3.3 @PostMapping
等价于@RequestMapping(value="",method=RequestMethod.POST)
3.4 @PutMapping(value="/users/{userId}")
等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)
3.5 @DeleteMapping("/users/{userId}")
等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)
4、前后端传值
4.1 @PathVariable
用于获取路径参数,通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中。
RequestMapping("user/get/mac/{macAddress}")
public String getByMacAddress(@PathVariable String macAddress){
//can do something;
}
4.2 @RequestParam
用于controller层,是Spring的注解,用于获取查询参数,解决前台参数名称与后台接收参数变量名称不一致的问题。
public String login(@RequestParam(value = "username") final String username,
@RequestParam(value = "password",required = false) final String password,
@RequestParam(value = "valcode",required = false) final String valcode) {
}
- value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的name为username的参数的值将传入;
- required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;
- defaultValue:默认值,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式,如“#{systemProperties['java.vm.version']}”。
4.3 @Param
用于dao层,是mybatis中的注解。
使得mapper.xml中的参数与后台的参数对应上,也增强了可读性。
如果两者参数名一致得话,spring会自动进行封装,不一致的时候就需要手动去使其对应上。 即:用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 。
List<Employee> getAllEmployeeByPage(@Param("page") Integer page,
@Param("size") Integer size);
5、表相关注解
5.1 @Entity
声明一个类对应一个数据库实体。
@Entity说明这个class是实体类,并且使用默认的orm规则,即class名就是数据库表中表明,class字段名即表中字段名。@Entity注解指明这是一个实体Bean。在项目启动时会根据该类自动生成一张表,表的名称即@Entity注解中name的值,如果不配置name,默认表明为类名所有的实体类都要有主键,@Id注解表示该属性是一个主键,@GeneratedValue注解表示注解自动生成,strategy则表示主键的生成策略。
@Data
@Entity(name = "t_book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "book_name")
private String name;
@Column(name = "book_author")
private String author;
private Float price;
@Transient
private String description;
}
5.2 @Table
@Table注解默认情况下只会完成表和实体之间的映射,声明才对象映射到数据库的数据表,通过它可以为实体指定表(table)。
常用属性:name 指定表 @Table(name = "book")
@Data
@Table(name="book")
public class Book{
@Id
private Integer id;
@Column(name="book_name")
private String name;
...
}
5.3 @Id
声明一个字段为主键。所有的实体类都要有主键,@Id注解表示该属性是一个主键。
5.4 @Column
声明字段,可以设置字段的属性,字段名、是否为空。
生成的表中字段的名称就是实体类中属性的名称,通过@Column注解可以定制生成的字段属性,name表示该属性对应的数据表中字段的名称,nullable表示该字段非空。
5.5 @Transient
声明不需要与数据库映射的字段,在保存的时候不需要保存进数据库。
@Transient注解表示在生成数据库中的表时,该属性被忽略,即不生成对应的字段。
6、事务注解@Transactional
@Transactional(rollbackFor = Exception.class) //这里回滚进行定义
public int update(Prdtv prdtv) throws RuntimeException{
//注意在这里处理业务时,不要使用Try ...异常捕获,否则不回滚
return prdtvMapper.update(prdtv);
}
@Transactional:事务注解,注解一般用在可以作用在类或者方法上
1.类上,表明类中所有 public 方法都启用事务 2.方法上,最常用的一种 3.接口上,不推荐使用
@Transactional注解只能在抛出RuntimeException或者Error时才会触发事务的回滚,常见的非RuntimeException是不会触发事务的回滚的。但是我们平时做业务处理时,需要捕获异常,所以可以手动抛出RuntimeException异常或者添加rollbackFor = Exception.class(也可以指定相应异常)
事务的隔离级别:是指若干个并发的事务之间的隔离程度
1. @Transactional(isolation = Isolation.READ_UNCOMMITTED):读取未提交数据(会出现脏读,
不可重复读) 基本不使用
2. @Transactional(isolation = Isolation.READ_COMMITTED):读取已提交数据(会出现不可重复读和幻读)
3. @Transactional(isolation = Isolation.REPEATABLE_READ):可重复读(会出现幻读)
4. @Transactional(isolation = Isolation.SERIALIZABLE):串行化
7、AOP注解
7.1 @After 在方法执行之后执行(方法上)
@After("pt()")
public void after(){
}
7.2 @Before 在方法执行之前执行(方法上)
@Before("pt()")
public void before(){
}
7.3 @Around 在方法执行之前与之后执行(方法上)
@Around("pt()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
Object ret = pjp.proceed();
return ret;
}
7.4 @AfterReturning当前方法作为返回后通知
@AfterReturning(value="pt()",returning = "ret")
public void afterReturning(Object ret) {
}
7.5 @AfterThrowing当前方法作为异常后通知
@AfterThrowing(value="pt()",throwing = "t")
public void afterThrowing(Throwable t){
}
@Aspect:声明一个切面
@PointCut:声明切点
@EnableAspectJAutoProxy:开启Spring对AspectJ代理的支持
8、Lombok
8.1 @Setter
注解在属性上。为属性提供 setting 方法。
8.2 @Getter
注解在属性上。为属性[欢迎转载听雨的人博客]提供 getting 方法。
8.3 @Data
注解在类上。等同于添加如下注解: @Getter/@Setter生成get,set方法 @ToString 生成toString方法 @EqualsAndHashCode 生成equals和hashcode方法 @RequiredArgsConstructor 生成一个指定名称的静态方法
public class Programmer{
@Getter
@Setter
private String name;
@Setter(AccessLevel.PROTECTED)
private int age;
@Getter(AccessLevel.PUBLIC)
private String language;
}
相当于:
public class Programmer{
private String name;
private int age;
private String language;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
protected void setAge(int age){
this.age = age;
}
public String getLanguage(){
return language;
}
}
9、MyBatis中常用注解
9.1 @Insert(sql语句):实现新增
public interface UserDAO{
@Options(useGeneratedKeys = true,keyColumn = "uid", keyProperty = "id")
@Insert("insert into t_user(username,password,gender,birth) values(#{username},#{password},#{gender},#{birth})")
public void insertUser(User user);
}
- 设置@Options属性userGeneratedKeys的值为true,并指定实例对象中主键的属性名keyProperty=“id”,以及在数据库中的字段名keyColumn=“uid”。这样在user插入数据后,userId属性会被自动赋值
9.2 @Update(sql语句):实现更新
public interface UserDAO{
@Update("update t_user set username=#{usernmae},password=#{password}")
public void updateUser(User user);
}
9.3 @Delete(sql语句):实现删除
public interface UserDAO{
@Delete("delete from t_user where id = #{id}")
public void deleteUserById(@Param("id") int id);
}
9.4 @Select(sql语句):实现查询
public interface UserDAO{
@Select("select * from t_user where id = #{id} and username = {#username}")
public User queryUserbyId(@Param("id") int id,@Param("username") String username);
}
其他MyBatis注解:
@Result(property="实体类属性的名称",jdbcType=数据库字段类型):实现结果集封装
@Results(column="数据库字段名",porperty="实体类属性名",jdbcType="数据库字段数据类型"):封装多个结果集(当数据库字段名与实体类对应的属性名不一致时,可以使用@Results映射来将其对应起来)
@ResultMap(@Results的id值):实现引用@Results 定义的封装
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
@CacheNamespace:实现注解二级缓存的使用
10、其他
1.@Scope注解默认的singleton单例模式。
@Scope注解是springIoc容器中的一个作用域,在 Spring IoC 容器中具有以下几种作用域:基本作用域singleton(单例)、prototype(多例),Web 作用域(reqeust、session、globalsession),自定义作用域。
2.Enable注解说明*
@EnableAsync: 开启异步方法的支持。
@EnableScheduling: 开启计划任务的支持。
@EnableAspectAutoProxy:开启对AspectJ自动代理的支持
@EnableAsync:开启异步方法的支持
@EnableScheduling:开启计划任务的支持
@EnableWebMvc:开启web MVC的配置支持
@EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持
@EnableJpaRepositories:开启对SpringData JPA Repository的支持
@EnableTransactionManagement:开启注解式事务的支持文章来源:https://www.toymoban.com/news/detail-790949.html
@EnableCaching:开启注解式的缓存支持文章来源地址https://www.toymoban.com/news/detail-790949.html
到了这里,关于Java的一些常用注解及其作用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!