概述
以下列出在开发时常用的注解:
<!-- 配置包扫描器 --> <!--猜有注解的包都需要配置如下,我这有个"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 系统可以帮你检查方法的正确性。
/**
*
* @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.CSSJSON传值进后台
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
最后
以上就是儒雅狗为你收集整理的Java web开发时常用的注解的全部内容,希望文章能够帮你解决Java web开发时常用的注解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复