Java web开发时常用的注解

以下列出在开发时常用的注解:

 
 <!-- 配置包扫描器 -->    <!--猜有注解的包都需要配置如下,我这有个"cn.nzxxx.*"也配了汗 -->
 <context:component-scan base-package="cn.nzxxx.controller"></context:component-scan>

@Autowired 
    自动装配一个bean
    默认是按照类型来注入的,需要按名字注入的话可以跟@Qualifier搭配使用
    要允许null值,可以设置它的required属性为false
    (当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,
    也会抛出BeanCreationException异常。我们可以使用@Qualifier配合@Autowired来解决这些问题-猜即多个实现类在在IoC容器中会报错)
@bean    //@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component 注解的类里.添加的bean的id为方法名
    @Configuration
    public class AppConfig {
        @Bean
        public TransferService transferService() {
            return new TransferServiceImpl();
        }
    }
    同
    <beans>
        <bean id="transferService" class="com.acme.TransferServiceImpl"/>
    </beans>
    
@Component
    把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
    @Service 用于标注业务层组件 
    @Controller 用于标注控制层组件(如struts中的action) 
    @Repository 用于标注数据访问组件,即DAO组件. 
    @Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
    
@Column
    配置表实体类时用    
    数据类型不同需要配置@Column 也不同;https://www.cnblogs.com/PacinoY/p/7485304.html
        name 属性定义了被标注字段在数据库表中所对应字段的名称        
        nullable 属性表示该字段是否可以为null值,默认为 true
        length 属性表示字段的长度,当字段的类型为varchar时,该属性才有效!!!!,默认为255个字符。
        precision 属性和 scale 属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数
        
        unique 属性表示该字段是否为唯一标识,默认为false。如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table标记中的@UniqueConstraint。
        insertable 和 updatable 属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的.false表不允许,猜默认true
            insertable 属性表示在使用"INSERT"脚本插入数据时,是否需要插入该字段的值。
            updatable 属性表示在使用"UPDATE"脚本插入数据时,是否需要更新该字段的值.
        columnDefinition 属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。(也就是说,如果DB中表已经建好,该属性没有必要使用。)
        table 属性定义了包含当前字段的表名。
        

        例     @Column(name="num",nullable=true,precision=12, scale=2) 
            @Column(name="STR",nullable=true,length=233) 
        
        @Id //要与@Column联用表示ID?
        @GeneratedValue(generator = "idGenerator") //主键生成策略,与@GenericGenerator联用
        @GenericGenerator(name = "idGenerator", strategy = "uuid")
        @Column(name ="ID",nullable=false,length=1000)
@Controller

@Configuration用于定义配置类,可替换spring的xml配置文件    ;这个配置类里面的内容会在项目加载时读取生成
    例 https://blog.csdn.net/qq_36582604/article/details/80906114

@Deprecated,
    用来表示某个类的属性或方法已经过时,不想别人再用时,在属性和方法
上用@Deprecated修饰

@GetMapping
    是@RequestMapping(method =RequestMethod.GET) 的缩写

@ExceptionHandler//进行异常处理的方法必须与出错的方法在同一个Controller里面,方法异常,会运行@ExceptionHandler下的方法
    详见 学习资料\JAVA\字符,字节流+上传下载\spring配置上传限制异常拦截

@FunctionalInterface//见文件"函数式接口+Lambda"


@JsonProperty("a")
private String abc;//属性-类中
当转化为json时,用a表示abc


@interface//自定义注解类
    原始写法
        @interface Basic {
            String name();
        }
        @interface Basics {
            Basic[] value();
        }
        @Basics( { @Basic(name="fix") , @Basic(name="todo") } )
        class Person{ }
    1.7写法
        @Repeatable(Basics.class)
        @interface Basic {
            String name();
        }
        @Retention(RetentionPolicy.RUNTIME)
        @interface Basics {
            Basic[] value();
        }
        
        //此时Person类可以通过多个@Basic注解进行注释
        @Basic(name="fix")
        @Basic(name="todo")
        class Person{ }
        
        //打印输出Person类的所有Basic注解
        Basic[] basics = Person.class.getAnnotationsByType(Basic.class);
        Arrays.asList(basics).forEach(a -> {
            System.out.println(a.name());
        });
@Override
    子类继承父类,子类方法前写
    @Override是伪代码,表示重写
    编译器可以给你验证@Override下面的方法名是否是你父类中所有的
    如果没有则报错
    举例:在重写父类的onCreate时,在方法前面加上@Override 系统可以帮你检查方法的正确性。

扫描二维码关注公众号,回复: 9888111 查看本文章

/**
 * 
 * @param 此段可加方法|属性前,智能提示时能看见此
 * @return
 */         


@Param
    mybatis所对应的接口类方法参只能为一个
    解决:int updateByExample(@Param("record") Clazz record, @Param("example") ClazzExample example);
    

@PostMapping
    是@RequestMapping(method =RequestMethod.POST)的缩写
@PostConstruct和@PreDestroy
    这两个注解被用来修饰一个非静态的void()方法
    有两种方式
    @PostConstructpublic void someMethod(){}或者public @PostConstruct void someMethod(){}
    有<load-on-startup>的servlet容器在启动时初始化该Servle,初始化工作由init方法负责执行完成    被@PostConstruct修饰的方法会在项目启动加载Servlet的时候运行,并且只会被服务器执行一次.
    PostConstruct在构造函数之后执行,init方法之前执行。PreDestroy修饰方法在servlet容器的destroy方法执行之后执行
            

@RestController注解相当于@ResponseBody + @Controller合在一起的作用
    此时,相当于每个方法前加了个@ResponseBody


@Resource
    类似@Autowired,这属于java自带的注解    javax.annotation.Resource
    @Resource装配顺序
  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找id匹配的bean进行装配(如果bean元素没有id只有name,name 属性值可以作为id 使用),找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName(bean的name值)方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配
    @Resource注解在字段上,可不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。(get还是要写的,只是bean注入赋值自动化而已)

@RequestMapping    
    1.在方法上用:后台接收的两种写法见\JSP.HTML.CSS\JSON\传值进后台
    2.在Controller类上用:相当于每个方法地址前加了个/testPageController
      例
        @Controller
        @RequestMapping("/testPageController")
        public class TestPageController extends BaseController {    


@RequestParam
    Controller中接收参 (String inputStr) 类似 (@RequestParam(value="参1") String 参1),若你写上@RequestParam就必须要有参叫参1的,否则报错,其余是一样的
    public String filesUpload(@RequestParam String inputStr, HttpServletRequest request) { 
        参1 同 request.getParameter("参1")

    <form action="/gadget/testRequestParam" method="post">    
         参数inputStr:<input type="text" name="inputStr">    
         参数intputInt:<input type="text" name="inputInt">    
    </form>  
    http://825635381.iteye.com/blog/2196911
    
    猜@RequestParam String inputStr 同 @RequestParam(value="inputStr") String inputStr
    
    @RequestParam(value="inputStr", defaultValue="a",required=false)String str
        //使参 inputStr(默认为a),可以当 str 使用;required默认true:当不传inputStr报错,若赋为false 不传会赋值为null(即int 接收会报错,用Integer)

@Retention
    @Retention可以用来修饰注解,是注解的注解,称为元注解
    有三种写法
    用@Retention(RetentionPolicy.CLASS)修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候;
    用@Retention(RetentionPolicy.SOURCE )修饰的注解,表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中;
    用@Retention(RetentionPolicy.RUNTIME )修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,
        所以他们可以用反射的方式读取。RetentionPolicy.RUNTIME 可以让你从JVM中读取Annotation注解的信息,以便在分析程序的时候使用.

    
@SuppressWarnings("finally")//当用try-catch-finally时,报黄线,点生成此,黄线消失,在ssm项目中
@SuppressWarnings("unchecked")//告诉编译器忽略 unchecked 警告信息,如使用List,ArrayList等未进行参数化产生的警告信息。
@SuppressWarnings("unused")//屏蔽:定义的变量在代码中并未使用且无法访问的警告
@SuppressWarnings("serial") 忽略序列化时没定义private static final long serialVersionUID = 5952689219411916553L; 的黄色警告
    推荐定义serialVersionUID, 而不是用注解进行忽略
@Scheduled    详见    JAVA\其它\后台配置文件解读\定时任务
@Service    猜同@Component
xxService类用,注解@Service修饰

@Transactional//默认REQUIRED,如若更改可如下
    //@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
    给方法加事务处理
    spring要配置
    <!--启动spring注解功能-->
    <!-- 开启事务注解驱动 -->
    <tx:annotation-driven transaction-manager="transactionManager" />
    方法里不能有try-catch,
    @Transactional标签默认会对RuntimeException异常进行回滚,如果你抛出的异常不是继承自RuntimeException,
    可 @Transactional(rollbackFor=Exception.class),同时 try catch里throw那个异常,如果不抛,事务根本不会回滚
    若手动回滚(详见JAVA\其它\小知识点\事务处理)就无需(rollbackFor=Exception.class)
    事务配置 JAVA\其它\后台配置\事务配置.txt
@Transient    
    建实体类的时候,有时候实体类的属性和数据库表字段不一致,比如多一个属性,那你不加这个注解就会报错,尤其是用 Hibernate 这样的框架的时候,但是再新写一个实体类又不太好,所以你要想写什么让 ORM 持久层忽略属性的实体类的时候,只要把这个东西加在你想忽略的属性上就可以了

@Test
    写方法前面,使方法里的东西如放在main一般,可以运行输出
    右键-run as-Junit Test(运行)
    如果报找不着此方法,对项目右键-run as-maven install
    猜@Before会在@Test前执行,里面可写:用java代码连数据库
    使用时,需要引入Maven jar--junit

    
@Value
    某.properties里值 com.ab=sa
    spring配置中会读取,根据<context:property-placeholder location="classpath:properties/*.properties" /> //会找 classpath 目录下的properties文件夹,下的*.properties文件(没找到idea会报红)
    在配置文件可${com.ab}
    java类中获取可
    @Value("${com.ab}")
    private String 变量名;
    spring里需要的配置(详见spring父子容器)
    
    https://blog.csdn.net/ryelqy/article/details/77453713
    方式一 用bean引入
        @Value("#{configProperties['t1.msgname']}")    
            <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">  
                <property name="locations">  
                    <list>  
                        <value>classpath:/config/t1.properties</value>  
                    </list>  
                </property>  
            </bean> 
        @Value("${t1.msgname}")
            //接着上写
            <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">  
                <property name="properties" ref="configProperties"/>  
            </bean>  
            //或直接写为
            <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">  
                <property name="location">  
                <value>config/t1.properties</value>  
                </property>  
            </bean>
    方式二     <context:property-placeholder location="classpath:properties/*.properties" />     
@WebFilter
    配置了此注解,就可以不必在 web.xml 中配置相应的 <filter> | <filter-mapping>等 元素了    
    https://blog.csdn.net/weixin_42114097/article/details/81530628
    
    
判断注解
    if(反射类的 method 对象.isAnnotationPresent(MyTarget.class))//为true表方法上有注解@MyTarget
输出注解的地址
    System.out.println(method.getAnnotation(MyTarget.class));  //猜此注解不存在报错

猜 用于配置文件映射为JavaBean(即配置文件映射为实体类,方便操作配置文件值)    
    @Component
    @PropertySource(value = "classpath:mongodb.properties")
    @ConfigurationProperties(prefix = "spring.data.mongodb")//spring.data.mongodb即mongodb.properties里值的前缀
    示例 https://blog.csdn.net/pengjunlee/article/details/84232582    
    

发布了12 篇原创文章 · 获赞 1 · 访问量 1311

猜你喜欢

转载自blog.csdn.net/weixin_39728880/article/details/100856418
今日推荐