开发工具--常见注解


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注解

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

12.@CrossOrigin:开启跨域机制

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。
在页面http://0.0.0.0:8000/crossorigin.html 中发起一个http请求,通过 XMLHttpRequest对象请求后端接口 http://127.0.0.1:8080/cross/cross,由于http://0.0.0.0:8000和http://127.0.0.1:8080 不是同一个域,因此后端返回的结果会被浏览器拦截掉(后端其实已经成功响应,直接结果被浏览器拦截),这就是浏览器的同源策略拦截了本次跨域请求。

http://www.123.com/index.html 调用 http://www.123.com/server.PHP (非跨域)

http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)

http://abc.123.com/index.html 调用 http://def.123.com/server.php(子域名不同:abc/def,跨域)

http://www.123.com:8080/index.html调用 http://www.123.com:8081/server.php(端口不同:8080/8081,跨域)

http://www.123.com/index.html 调用 https://www.123.com/server.php(协议不同:http/https,跨域)

请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。

当域名www.abc.com下的js代码去访问www.def.com域名下的资源,就会受到限制。

@CrossOrigin可以处理跨域请求,让你能访问不是一个域的文件。

13. @RequestBody:由json转为user对象

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);而最常用的使用请求体传参的无疑是POST请求了,所以使用@RequestBody接收数据时,一般都用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。

注:当同时使用@RequestParam()和@RequestBody时,@RequestParam()指定的参数可以是普通元素、
数组、集合、对象等等(即:当,@RequestBody 与@RequestParam()可以同时使用时,原SpringMVC接收
参数的机制不变,只不过RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value
里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收)。

14.@ResponseBody:user对象可以转化为json

15.@PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值

@RequestMapping("show5/{id}/{name}")
    public ModelAndView test5(@PathVariable("id") Long ids ,@PathVariable("name") String names){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","占位符映射:id:"+ids+";name:"+names);
        mv.setViewName("hello2");
        return mv;
    } 

1、若方法参数名称和需要绑定的url中变量名称一致时,可以简写:

@RequestMapping("/getUser/{name}")
    public User getUser(@PathVariable String name){
        return userService.selectUser(name);
    }

2、若方法参数名称和需要绑定的url中变量名称不一致时,写成:

@RequestMapping("/getUserById/{name}")
    public User getUser(@PathVariable("name") String userName){
        return userService.selectUser(userName);
    }

二.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) //开启链式编程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望山。

谢谢您的打赏!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值