欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring和springmvc的注解总结

程序员文章站 2022-07-15 11:45:20
...

spring和springmvc的常用注解:
注解:参与代码编译,以@开头的。它是给应用程序看的,单独使用注解毫无意义,一定要跟工具一起使用,这个所谓的工具实际就是能读懂注解的应用程序
Spring部分:
声明Bean:
@Component:标准一个普通的spring Bean类。
@Controller:标注一个控制器组件类。
可以配合@RequestMapping注解在类上。可以窄化请求
@Service:标注一个业务逻辑组件类。
@Repository:标注一个DAO组件类。
Bean实例的名称默认是Bean类的首字母小写,其他部分不变。当类的名字是以两个或以上的大写字母开头的话,bean的名字默认会与类名保持一致,我们可以在注解中加一个name属性来强制指定Bean的名称例如@Service(“user”)。在spring未来的版本中,@Controller,@Service,@Repository会携带更多语义。尽量考虑使用@Controller,@Service,@Repository代替通用的@Component。
一般在配置了以上注解的时候,还需要配置一个包扫描器来指定spring的搜索路径
<context:component-scan base-package=“com.java.app.service”/>
自动在com.java.app.service包下扫描注解。
注入Bean:
@Autowired(spring的注解),自动装配注入,省去了setter方法。将自动在代码上下文中找到和其匹配(默认是类型匹配,同一类型多个再使用名称查找)的Bean,并自动注入到相应的地方去。
@Autowired(required = false) required属性默认为true,知道不到bean就会报错,设置为false,找不到就会设置成null.
@Autowired
@Qualifier(“userJdbcImps”)当同一类型多个时,指定名称查找。也可以修改注入的字段的名称或者使用@Qualifier指定。
@Resource(J2EE的注解):默认安照名称进行装配,名称可以通过name属性进行指定, 如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
@Inject(J2EE的注解)
Java配置类注解:
@Configuration 声明当前类为配置类,相当于xml形式的Spring配置(类上)
@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)
@Import注解可以允许从其他配置类中加载@Bean的定义。
@Bean属性支持:
@Scope声明在IOC容器中的作用域,默认是单例。属性值:
singleton(单例)全局有且仅有一个实例
prototype(多例) 每次获取Bean的时候会有一个新的实例
后面三种只能用于web程序,通常和XmlWebApplicationContext共同使用
Request:spring容器会为每个HTTP请求创建一个全新的RequestPrecessor对象,当请求结束后,该对象的生命周期即告结束,如同java web中request的生命周期。
Session:Spring容器会为每个独立的session创建属于自己的全新的UserPreferences实例,比request scope的bean会存活更长的时间,其他的方面没区别,如果java web中session的生命周期。
global session:只有应用在基于portlet的Web应用程序中才有意义,它映射到portlet的global范围的session。如果在普通的基于servlet的Web应用中使了用这个类型的scope,容器会将其作为普通的session类型的scope来对待。
@PostConstruct 由JSR-250提供,在构造函数执行完之后执行,等价于xml配置文件中bean的initMethod
@PreDestory 由JSR-250提供,在Bean销毁之前执行,等价于xml配置文件中bean的destroyMethod

AOP相关注解:
@Aspect 声明一个切面(类上) 使用@After、@Before、@Around定义通知(advice),可直接将拦截规则(切点)作为参数。
@After 在方法执行之后执行(方法上) 还需要再其中指定一个PointCut
@Before 在方法执行之前执行(方法上) 还需要再其中指定一个PointCut
@Around 在方法执行之前与之后执行(方法上)也需要PointCut
@PointCut 声明切点 在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(类上)
@Value注解
@Value 为属性注入值(属性上) @Value(“${}”)和@Value(“#{}”)两种方式,
@Value("#{}") 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量.
例如:
@Value("#{1}")
private int number; //获取数字 1
@Value("#{‘Spring Expression Language’}") //获取字符串常量
private String str;
@Value("#{dataSource.url}") //获取bean的属性
private String jdbcUrl;

@Value("${}") 可以获取对应属性文件中定义的属性值。
例如:获取一个properties文件中的值。
一个properties文件中有 user=Godv
在xml中:

<context:property-placeholder location="classpath:exam.properties"/>

在代码中:
@Value(value = “${user}”)
private String name;
就可以得到name的值为Godv.
测试相关的注解:
@RunWith就是一个运行器,@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境。只适用于junit4
@ExtendWith 注解可以声明在测试方法和类的执行中启用相应的扩展,@ExtendWith(SpringExtension.class) 让测试运行于spring测试环境,只适用于junit5.
@ContextConfiguration 用来加载配置ApplicationContext,其中classes属性用来指定加载配置类@ContextConfiguration(“classpath:applicationContext.xml”)
不配置默认的读取路径是当前类路径下的命名为:类名-context.xml的配置文件。

@SpringJUnitConfig(locations=“classpath:app-context.xml”)。括号不写在当前目录找:类名称-context.xml 只适用于junit5
等同于
@ExtendWith(SpringExtension.class)
@ContextConfiguration(“classpath:applicationContext.xml”)

Junit5的demo
@ExtendWith(SpringExtension.class)
@ContextConfiguration(“classpath:app-context.xml”)
public class app {
@Autowired
private Bean bean;
@Test
public void test1() {
System.out.println(bean);
bean.say();
}
}
其中
@ExtendWith(SpringExtension.class)
@ContextConfiguration(“classpath:app-context.xml”)
可简写成:
@SpringJUnitConfig(locations=“classpath:app-context.xml”)
Junit4的demo:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(“classpath:app-context.xml”)
public class app {
@Autowired
private Bean bean;
@Test
public void test1() {
System.out.println(bean);
bean.say();
}
}
不能简写。
注意:我们在使用单元测试时:注意控制我们导入的版本和eclipse设置的版本一致。
在junit4中,使用的是@RunWith(SpringRunner.class)来设置运行器。且java运行版本在jdk5 或更高。导入的包是import org.junit.Test;测试方法只能用public,其他的都不行。
在junit5中,使用的是@ExtendWith(SpringExtension.class)来设置运行器。且java运行版本在jdk8或者更高。导入的包是import org.junit.jupiter.api.Test; 测试方法不能用private.其他的都可以

Springmvc部分:
@RequestMapping一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径类窄化请求.
属性说明:
value:指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method:指定请求的method类型, GET、POST、PUT、DELETE等;
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params:指定request中必须包含某些参数值,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
@ModelAttribute和 @SessionAttributes
@SessionAttributes:
该注解用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用。
该注解有value、types两个属性,可以通过名字和类型指定要使用的attribute 对象;
@ModelAttribute
该注解有两个用法,一个是用于方法上,一个是用于参数上;
用于方法上时:通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;
用于参数上时: 用来通过名称对应,把相应名称的值绑定到注解的参数bean上;要绑定的值来源于:
A) @SessionAttributes 启用的attribute 对象上;
B) @ModelAttribute 用于方法上时指定的model对象;
C) 上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中。
@RequestHeader:完成请求头(header)数据到处理器功能处理方法的方法参数上的绑定;
@CookieValue:完成 Cookie 数据到处理器功能处理方法的方法参数上的绑定;

@PathVariable:用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。
@requestParam:主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”),它有三个常用参数:defaultValue = “0”, required = false, value = “isApp”;defaultValue 表示设置默认值,required 通过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。
@ResponseBody:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。一般用于返回json和xml时,
@RequestBody该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。