1.@responsebody
使用在一个方法上面,一般在Controller里面的方法中,都会使用@RequestMapping来定位这个方法的,然后我们一般返回都是一个url,比如return'index',表示返回index.jsp/html页面,而如果我们在方法上面加上@responsebody,那么返回的数据就不会被解析成为跳转的url路径,而是直接写入HTTP responsebody中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。
2.@RequestBody
该注解用于读取request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上面。注解用于将Controller的方法参数,根据HTTP Request Header的content-Type的内容,通过适当的HttpMessageConverter转换为JAVA类,使用在POST或者PUT的数据是JSON格式或者XML格式,而不是普通的键值对形式.
3.@RequestMapping
用来在Controller作定位用的:eg:@RequestMapping("/admin/log/")
4.@Autowired/@resource
1)@Autowired与@Resource都可以用来装配bean.都可以写在字段上,或写在setter方法上。
2)@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:
@Autowired() @Qualifier("baseDao")
private BaseDao baseDao;
3)@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定,
如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
@Resource(name="baseDao")
private BaseDao baseDao;
5.java自定义注解
元注解
元注解是指注解的注解:@Retention @Target @Document @Inherited四种。
1)
@Retention: 定义注解的保留策略
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) //默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) //注解会在class字节码文件中存在,在运行时可以通过反射获取到
2)
@Target:定义注解的作用目标
源码:
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
由以上的源码可以知道,他的elementType 可以有多个,一个注解可以为类的,方法的,字段的等等
3) @Document:说明该注解将被包含在javadoc中
4) @Inherited:说明子类可以继承父类中的该注解
6.spring-AOP
@aspect申明一个切面类
打印信息:
方法before前执行.....
方法环绕start.....
我看.....................
方法after执行.....
方法环绕end.....
方法afterReurning执行.....
7.spring注解
@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
@Service 通常作用在业务层,但是目前该功能与 @Component 相同。
@Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。
@Repository注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。具体只需将该注解标注在 DAO类上即可。同时,为了让 Spring 能够扫描类路径中的类并识别出 @Repository 注解,需要在 XML 配置文件中启用Bean 的自动扫描功能,这可以通过<context:component-scan/>实现。如下所示:
// 首先使用 @Repository 将 DAO 类声明为 Bean
package bookstore.dao;
@Repository
public class UserDaoImpl implements UserDao{ …… }
// 其次,在 XML 配置文件中启动 Spring 的自动扫描功能
<beans … >
……
<context:component-scan base-package=”bookstore.dao” />
……
</beans>
8.@SuppressWarnings去除警告
9.@import
@Import注解就是之前xml配置中的import标签,可以用于依赖第三方包中bean的配置和加载
在4.2之前只支持导入配置类
在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean
eg:
@Configuration
@Import(DemoService.class)//在spring 4.2之前是不不支持的
public class DemoConfig {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com..example");
DemoService ds = context.getBean(DemoService.class);
ds.doSomething();
}
}
10.@Configuration
Configuration 是 Spring 3.X 后提供的注解,用于取代 XML 来配置 Spring
@Configuration一般被用来初始化配置,有两种方法可以使带有@Configuration的类被初始化,一为让把类所在包的路径纳入scanBasePackages,这样就进入了Spring的扫描范围;还有一种方法就是在spring.factories中用org.springframework.boot.autoconfigure.EnableAutoConfiguration=类的全路径名,这样在项目启动的时候SpringFactoriesLoader会初始化spring.factories(包括引入的jar包中的)中配置的类。在spring.factories配置的好处就是,如果我们想开发一个jar把供其他人使用,那么我们就在自己工程的spring.factories中配置@@Configuration类,这样只要其他人在他们项目的POM中加入了我们开发的jar包作为依赖,在他们项目启动的时候就会初始化我们开发的工程中的类。
使用在一个方法上面,一般在Controller里面的方法中,都会使用@RequestMapping来定位这个方法的,然后我们一般返回都是一个url,比如return'index',表示返回index.jsp/html页面,而如果我们在方法上面加上@responsebody,那么返回的数据就不会被解析成为跳转的url路径,而是直接写入HTTP responsebody中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。
2.@RequestBody
该注解用于读取request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上面。注解用于将Controller的方法参数,根据HTTP Request Header的content-Type的内容,通过适当的HttpMessageConverter转换为JAVA类,使用在POST或者PUT的数据是JSON格式或者XML格式,而不是普通的键值对形式.
3.@RequestMapping
用来在Controller作定位用的:eg:@RequestMapping("/admin/log/")
4.@Autowired/@resource
1)@Autowired与@Resource都可以用来装配bean.都可以写在字段上,或写在setter方法上。
2)@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:
@Autowired() @Qualifier("baseDao")
private BaseDao baseDao;
3)@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定,
如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
@Resource(name="baseDao")
private BaseDao baseDao;
5.java自定义注解
元注解
元注解是指注解的注解:@Retention @Target @Document @Inherited四种。
1)
@Retention: 定义注解的保留策略
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) //默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) //注解会在class字节码文件中存在,在运行时可以通过反射获取到
2)
@Target:定义注解的作用目标
源码:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
由以上的源码可以知道,他的elementType 可以有多个,一个注解可以为类的,方法的,字段的等等
3) @Document:说明该注解将被包含在javadoc中
4) @Inherited:说明子类可以继承父类中的该注解
6.spring-AOP
@aspect申明一个切面类
@Aspect
public class AspectStyle {
配置切面点
@Pointcut("execution(* com.sxit..*.*(..))")
public void init(){
}
@Before(value="init()")
public void before(){
System.out.println("方法执行前执行.....");
}
@AfterReturning(value="init()")
public void afterReturning(){
System.out.println("方法执行完执行.....");
}
@AfterThrowing(value="init()")
public void throwss(){
System.out.println("方法异常时执行.....");
}
@After(value="init()")
public void after(){
System.out.println("方法最后执行.....");
}
@Around(value="init()")
public Object around(ProceedingJoinPoint pjp){
System.out.println("方法环绕start.....");
Object o = null;
try {
o = pjp.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println("方法环绕end.....");
return o;
}
}
打印信息:
方法before前执行.....
方法环绕start.....
我看.....................
方法after执行.....
方法环绕end.....
方法afterReurning执行.....
7.spring注解
@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
@Service 通常作用在业务层,但是目前该功能与 @Component 相同。
@Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。
@Repository注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。具体只需将该注解标注在 DAO类上即可。同时,为了让 Spring 能够扫描类路径中的类并识别出 @Repository 注解,需要在 XML 配置文件中启用Bean 的自动扫描功能,这可以通过<context:component-scan/>实现。如下所示:
// 首先使用 @Repository 将 DAO 类声明为 Bean
package bookstore.dao;
@Repository
public class UserDaoImpl implements UserDao{ …… }
// 其次,在 XML 配置文件中启动 Spring 的自动扫描功能
<beans … >
……
<context:component-scan base-package=”bookstore.dao” />
……
</beans>
8.@SuppressWarnings去除警告
9.@import
@Import注解就是之前xml配置中的import标签,可以用于依赖第三方包中bean的配置和加载
在4.2之前只支持导入配置类
在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean
eg:
@Configuration
@Import(DemoService.class)//在spring 4.2之前是不不支持的
public class DemoConfig {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com..example");
DemoService ds = context.getBean(DemoService.class);
ds.doSomething();
}
}
10.@Configuration
Configuration 是 Spring 3.X 后提供的注解,用于取代 XML 来配置 Spring
@Configuration一般被用来初始化配置,有两种方法可以使带有@Configuration的类被初始化,一为让把类所在包的路径纳入scanBasePackages,这样就进入了Spring的扫描范围;还有一种方法就是在spring.factories中用org.springframework.boot.autoconfigure.EnableAutoConfiguration=类的全路径名,这样在项目启动的时候SpringFactoriesLoader会初始化spring.factories(包括引入的jar包中的)中配置的类。在spring.factories配置的好处就是,如果我们想开发一个jar把供其他人使用,那么我们就在自己工程的spring.factories中配置@@Configuration类,这样只要其他人在他们项目的POM中加入了我们开发的jar包作为依赖,在他们项目启动的时候就会初始化我们开发的工程中的类。