总结项目中我们常用的注解

举报
小小张自由--张有博 发表于 2022/03/28 15:02:46 2022/03/28
【摘要】 总结项目中我们常用的注解

注解产生的原因

给大家看看SSM项目的配置文件!

applicationContext.xml文件

1629532548157-2e9dd972-15e9-4d6c-b93c-5ee7d958ccf8.png

在使用注解之前,XML被广泛用于框架的配置,开发人员和架构师认为XML维护变得越来越麻烦。

开发速度相对较慢,编译时很难检查出错误, 运行中的错误很难定位, 调试难度较大。后来注解开发的方式应运而生,

注入bean的时,一个注解搞定,接收http请求时,一个注解搞定。轻松高效,出现bug很快就能解决


xml 和 注解的使用场景与区别

注解:是一种分散式的元数据,与源代码紧绑定。
xml:是一种集中式的元数据,与源代码无绑定。

注解与注释?

注释:给程序员去看

注解:给计算机去看 

Java注解: JDK5.0 引入的一种注释机制。

最开始:Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。后来有慢慢加了很多。

常用的四个:
@Override:标明此方法覆盖了父类的方法

@Target :描述注解能够作用的位置
	ElementType取值:
	* TYPE:可以作用于类上
	* METHOD:可以作用于方法上
	* FIELD:可以作用于成员变量上
@Retention :描述注解被保留的阶段
	RetentionPolicy取值:
    * SOURCE:源文件有效
	* Class:Class文件有效
	* RUNTIME:运行时有效
@Documented: 描述注解是否被抽取到api文档中


Spring的注解

用于创建对象的


@Component:把资源让spring来管理。相当于xml中配置一个bean。
			value:指定bean的id,如果不指定value属性,默认bean的id是当前类的类名。首字母小写

@Controller:与@Component功能一样,一般用在表现层,便于分层
@Service:与@Component功能一样,一般用在业务层,便于分层
@Repository:与@Component功能一样,一般用于持久层,便于分层

@Bean:该注解只用用在方法上,表明使用此方法创建一个对象,并且放入spring容器中

用于注入数据的

@Autowired:自动按照类型注入。
      使用要注入的对象变量名称作为bean的id,在spring容器中查找,找到了注入成功,找不到就报错。
      默认按类型装配  , 也可以使用名称装配,配合@Qualifier注解
      
@Qualifier:在自动按照类型注入的基础上,再按照Bean的id注入。

@Resource:直接按照Bean的id注入。它也只能注入其他Bean类型。name属性是指定Bean的id
		  默认按名称进行装配,通过name属性进行指定

@Value:注入基本数据类型和String类型数据 
	    @Value("${authUrl.productId}")-常用与注入配置文件中的数据
 

Spring5的新注解

@Configuration:用于指定当前类是一个spring配置类,当有容器时会从该类上加载注解。

@ComponentScan:用于指定spring在初始化容器时要扫描的包。

@Import:用于导入其他配置类,解耦合

@Scope("prototype"):指定Bean的作用范围
---singleton单例,prototype多例

SpringMVC的注解

@RequestParam:把请求中指定名称的参数给控制器中的形参赋值
@GetMapping(value = "/queryReceivedNegotiation")
 public Wrapper queryReceivedNegotiation(@RequestParam String userId) 
 ----示例  
 http://localhost:8012/upload/queryReceivedNegotiation?userId=3433434
 
@PathVariable:用于绑定URL中的占位符
@GetMapping(value = "/querySumBulletChat/{userId}")
public Wrapper queryCommentReply( @PathVariable String userId)
 ----示例
 http://localhost:8012/videoBulletchat/querySumBulletChat/3434
 
upload/queryReceivedNegotiation?userId=adfadfad
videoBulletchat/querySumBulletChat/this.userid:

    
 # RequestParam只能用于接收请求带的params
 # PathVariable用于接收url路径上的参数

@RequestBody:用于获取请求体内容


@RequestMapping:RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。
作用与类上用@RequestMapping
作用与方法上可用@RequestMapping的变形    @GetMapping与@PostMapping
@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。


@GetMapping:Get请求

@PostMapping:post请求
@PostMapping("insertPdfBehavior")
public Wrapper insertUserBehavior(@RequestBody PdfBehaivorEntiry entiry) 


Mybatis的注解

@Insert 增
	 @Insert("insert into t_md5(id,md5,path,create_time,update_time,creator,remark,is_delete) values
             (#{id},#{md5},#{path},#{createtime},#{updatetime},#{creator},#{remark},#{isdelete})")
@Delete 删
	 @Delete("DELETE FROM t_project WHERE project_name=#{projectName}")
@Update 改
	 @Update("UPDATE t_project SET project_name =#{newName} where id =#{id}")
@Select 查
	@Select("select * from t_project where project_name=#{name}")

对于mybatis中简单的数据处理,可以使用注解,毕竟看起来代码很清爽;而设计复杂的逻辑处理时使用xml方式,目前较为成熟。

自定义注解--简单例子

/**
 * @Author: Promsing(张有博)
 * @Date: 2021/8/21 - 17:09
 * @Description: 自定义注解
 * @version: 1.0
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {

    String getValue();
}


public class HelloService {

    static Class<HelloService> clazz=HelloService.class;
    @MyAnnotation(getValue = "hello")
    public static void sayHello(){
        Method sayHello = null;
        try {
            sayHello = clazz.getMethod("sayHello", null);
            MyAnnotation annotation = sayHello.getAnnotation(MyAnnotation.class);
            System.out.println(annotation.getValue());
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        sayHello();
    }

}

注解:

解开注解的神秘面纱

像是在一个广场上(项目),给部分人打上一个标签(注解),然后可以根据某种“机制”找到这些标签,并给这些标签赋值,修改。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。