文章目录
- 一.Spring部分常用注解
- 1.声明bean的注解
- 2.注入bean的注解
- 3.java配置类相关注解
- 4.@SpringBootTest 通过这个注解,可以动态的从spring容器中获取对象
- 5.@EnableAutoConfiguration注解说明
- 6.切面AOP相关注解
- 7.@Value注解:给属性赋值,有以下几种:
- 8.@Bean的属性支持
- 9.关于元注解的说明
- 10.@ComponentScan说明
- 11.@Override注解
- 12.@CrossOrigin:开启跨域机制
- 13. @RequestBody:由json转为user对象
- 14.@ResponseBody:user对象可以转化为json
- 15.@PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值
- 二.SpringMVC部分
- 三.lombok注解
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) //开启链式编程