开发工具--常见注解

Posted 望山。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发工具--常见注解相关的知识,希望对你有一定的参考价值。


Java注解,又称java标注,是jdk5.0引入的一种注释机制。
java语言中的类、方法、变量、参数和包都可以被标注,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注

一.Spring部分常用注解

1.声明bean的注解

@Component:泛指各种组件,没有明确的角色
@Service 在业务逻辑层使用(service层)
@Repository 在数据访问层使用(dao层)
@Controller在展现层使用,控制器的声明(Controller)

举例:

package cn.tedu.ioc;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;

@Component("a")//自动完成IOC,自己指定bean的名字a->{”a“,new User()}spring提供的,用来ioc
//@Component//默认的bean的名字,user
//@Component 自动完成IOC->{”user“,new User()}
//@Controller//spring提供的,用来ioc
//@Service//spring提供的,用来ioc
public class User {
    public void get(){
        System.out.println(123);
    }
}

2.注入bean的注解

注入方式:
1.根据类型注入(默认规则)
2.根据名称注入 @Autowired//类型
@Qualifier(“user2”)//名称

@Autowired:由Spring框架自带的, 顾名思义自动装配,Spring会自动将我们标记为@Autowired的元素装配好,在bean中的属性上通过@Autowired实现自定义bean类型的属性注入,使用时对应的bean必须被spring管理,即手动配置了bean或者在类上添加了@Component注解。

package cn.tedu.di2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class Student {
    @Autowired//底层是反射,当于框架完成了:new Student().setTeacher(new Teacher());
    Teacher t ;
    String name = "蔡徐坤";

    @Override
    public String toString() {
        return "Student{" +
                "t=" + t +
                ", name='" + name + '\\'' +
                '}';
    }
}

@Inject:由JSR-330提供,@Inject用法和@Autowired一样。

@Resource:由JSR-250提供

@Autowired、@Inject是默认按照类型匹配的,@Resource是按照名称匹配的,@Autowired如果需要按照名称匹配需要和@Qualifier一起使用,@Inject和@Name一起使用。

@Primary:让spring进行自动装配的时候,默认使用首选的bean,和@Qualifier一个效果。

3.java配置类相关注解

@Configuration:声明当前类为配置类,其中内部组合了@Component注解,相当于xml形式上的Spring配置。
该注解一般标识类文件,告知springBoot程序 这个类是用来整合第三方框架/配置的.

@SpringBootConfiguration注解说明
**说明1:**关键词:配置文件/配置类 作用:整合第三方框架(配置)

说明2:@SpringBootConfiguration修饰主启动类,说明主启动类也是一个配置类.

说明3: SpringBoot主启动类会扫描用户自己的配置类,并且实例化对象.

4.@SpringBootTest 通过这个注解,可以动态的从spring容器中获取对象

5.@EnableAutoConfiguration注解说明

说明: 自动化的配置如图所示:

@AutoConfigurationPackage说明

该注解表示自动配置的包扫描的路径.
工作原理: 该注解会动态的获取主启动类当前的包路径.之后开启包扫描的机制.

@Import(AutoConfigurationImportSelector.class)

知识回顾: SpringBoot使用体现了"开箱即用"的思想,用户引入jar包之后 可以直接使用(少量配置).
思考: dependencies代表程序的依赖项,(将其他的包加载到自己的项目中), 只是加载不负责执行.

6.切面AOP相关注解

@Aspect 声明一个切面(类上)
@After 在方法执行之后执行,后置通知(方法上)
@Before 在方法执行之前执行,前置通知(方法上)
@Around 在方法执行之前与之后执行,环绕通知(方法上)

@PointCut 声明切点

7.@Value注解:给属性赋值,有以下几种:

1.注入普通字符
@Value("Jason")
String name;
2.注入操作系统属性
@Value("#{systemProperties['os.name']}")
String osName;
3.注入表达式结果
@Value("#{ T(java.lang.Math).random() * 100 }") 
String randomNumber;
4.注入其它bean属性
@Value("#{domeClass.name}")
String name;
5.注入文件资源
@Value("classpath:com/hello/a.txt")
String Resource file;
6.注入网站资源
@Value("http://www.cznovel.com")
Resource url;
7.注入配置文件
@Value("${book.name}")
String bookName;

@Value三种情况的用法:

${}是去找外部配置的参数,将值赋过来
#{}是SpEL表达式,去寻找对应变量的内容
#{}直接写字符串就是将字符串的值注入进去

8.@Bean的属性支持

@Scope 设置Spring容器如何新建Bean实例(方法上,得有@Bean)
其设置类型包括:

@Singleton (单例,一个Spring容器中只有一个bean实例,默认模式),
@Protetype (每次调用新建一个bean),
@Request (web项目中,给每个http request新建一个bean),
@Session (web项目中,给每个http session新建一个bean),
@GlobalSession(给每一个 global http session新建一个Bean实例)

@StepScope 在Spring Batch中还有涉及

@PostConstruct 由JSR-250提供,在构造函数执行完之后执行,等价于xml配置文件中bean的initMethod

@PreDestory 由JSR-250提供,在Bean销毁之前执行,等价于xml配置文件中bean的destroyMethod

9.关于元注解的说明

1.@Target(ElementType.TYPE) 该注解对类有效
2.@Retention(RetentionPolicy.RUNTIME) 该注解在运行期有效
3.@Documented生成源码时,是否动态生成注释文档
4.@Inherited 标识注解是否可以被继承

10.@ComponentScan说明

说明:当springboot启动时,会实例化很多的对象,但是需要排除特定的类型
原因:
SprinGBoot内部兼容了很多的第三方框架,但是其中个别加入之后会影响整个代码流程,所以通过这样的方式将个别的类排除在外.

@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

11.@Override注解

检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。

二.SpringMVC部分

@Controller:声明该类为SpringMVC中的Controller

@RequestMapping:用于映射Web请求,包括访问路径和参数(类或方法上)

@ResponseBody:支持将返回值放在response内,而不是一个页面,通常用户返回json数据(返回值旁或方法上)

@RequestBody:允许request的参数在request体中,而不是在直接连接在地址后面。(放在参数前)

@RestController:该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。

@CrossOrigin //放行JS的请求–跨域的解决方案

三.lombok注解

@Data会自动生成set get toString equals hashCode
@NoArgsConstructor自动生成无参构造
@AllArgsConstructor自动生成全参构造
@Accessors(chain = true) //开启链式编程

以上是关于开发工具--常见注解的主要内容,如果未能解决你的问题,请参考以下文章

开发工具--常见注解

常见的代码片段

几条jQuery代码片段助力Web开发效率提升

Alfred常见使用

Java中三种常见的注释(注解) Annotation

lombok常见注解