1.@Component 元注解
可以用来标注其他注解,被他标注的注解,会起到与它相同或者类似的作用,例如@Controller @Service @Repository
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Controller { String value() default ""; }
@Component 也可用来对那些比较中立的类进行注释(说不好是服务层还是控制层或是数据访问层)
2.@responseBody
@responseBody注解可以将Controller的方法返回的对象通过适当的转换器转换为指定的格式,一般用来返回JSON数据或者是 XML
3.@ControllerAdvice + @ExceptionHandler
进行 Controller 层异常处理,不用在 Controller 层进行 try-catch处理异常
@ResponseBody @ControllerAdvice public class ExceptionHandle { @ExceptionHandler(value = Exception.class) public ResultMap hadndle(Exception e){ e.printStackTrace(); return Result.error(e.getMessage()); } }
4.@Autowired + (@Qualifier)
自动装配,作用是为了省略Java代码里面的getter/setter与bean属性中的property。并且getter也可以看需求,如果私有属性 需要对外提供的话,应当予以保留。
当Spring发现@Autowired注解时,将自动在代码上下文中找到和其匹配(默认是类型匹配)的Bean,并自动注入到相应的 地方去。
但是bean里面如果有property属性配置项,java代码里面又去掉了属性的getter/setter并使用@Autowired注解标注,Spring会 按照xml优先的原则去java代码中寻找属性的getter/setter,则会导致初始化bean报错。
如果我们删除了xml文件中的Bean定义,Spring容器便找不到这个了。如果属性找不到又不想让Spring容器抛异常,而只是显 示null,我们可以将@Autowired注解的required属性设置为false
public class People { @Autowired(required = false) private Name name @Autowired(required = false) private Sex sex public String toString() { return name+ "," + sex } }如果是一个借口,有多种实现类,Bean里引用的是接口名,Spring便不知道该引用哪个实现类了,这时我们可以用@Qualifier进行 指定我们要引用的是哪个实现类
@Service public class People { @Autowired @Qualifier("Chinese") private Person person; public String toString() { return person.personName(); } }5.@Resource
@Resource的装配顺序:
1、@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
2、指定了name或者type则根据指定的类型去匹配bean
3、name和type全都制定了,则根据指定的name和type去匹配bean,任何一个不匹配都将报错
@Service public class People { @Resource(name = "chinese") private Chinese chinese; @Resource(type = Japanese.class) private Japanese japanese; public String toString() { return chinese + "," + japanese; } }
@Autowired和@Resource注解的区别:
1、@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
2、@Autowired是Spring的注解,@Resource是J2EE的注解,Spring属于第三方的,J2EE是Java自己的,因此建议使用 @Resource注解来减少代码和Spring之间的耦合
6.@Service
把xml文件中配置的bean也省略了,更加方便
1.放在类前,直接声明该类是一个bean,其他的类才可以使用@Autowired将该类作为一个成员变量自动注入
2.bean的id与类名相同,但首字母小写
7.@Configuration
用于定义配置类,可替换xml配置文件,被注解的类内部包含一个或多个被@Bean注解的方法,这些方法将会被 AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,用于构建bean定义,初 始化Spring容器。
8.@Bean
@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。所添加的 bean的id名是方法名
也可以给bean赋予别名
@Bean(name = "haha") @Bean(name = { "hehe", "lala", "heihei" })9.@Scheduled
定时执行任务
@Scheduled(fixedRate = 1000 * 60,initialDelay = 2000)fixedRate = 1000 * 60 表示每60秒执行一次,每次执行周期以上次开始时间为基准
initialDelay = 2000 表示第一次执行开始时间延迟2秒
@Scheduled(fixedDelay=5000)表示每2秒执行一次,每次执行周期以上次结束时间为基准
@Scheduled(cron="*/5 * * * * MON-FRI")表示只在工作日执行
1、注解@Scheduled,要写在该实现方法上
2、定时器的任务方法不能有返回值,如果有返回值,需要设定一个proxytargetclass的某个值为true
3、实现类上要有组件的注解@Component。
10.@Value
Spring可以通过@value方式来获取 .porperties文件的内容
@Value("${user.from}")表示取出.properties中的user.from的值
@Value("#{user.name()}")
@Service("user") public class User{ public String name() { return "大雄"; } }
表示取出一个bean方法,为取出User.class类中的name方法
11 aop面向切面编程常用注解
@Aspect
@Component
@PointCut
@Before
@After
@AfterReturning
@Around
@AfterThrowing
11.1.@Aspect
面向切面编程注解,常用于同一日志管理
11.2.@Pointcut("execution(public * com.myCompany.myProject.controller..*.*(..))")
Pointcut指定哪些方法需要被执行"AOP"面向切面编程
@PointCut 注解的方法不会被执行,只起到了一个把切面表达式抽象出来的作用。
11.3.@AfterReturning(returning = "object", pointcut = "myPointcut()")
pointcut/value:这两个属性的作用相同,都是指定切入点对应的切入表达式。当指定了pointcut属性值后,value属性值将 会被覆盖。
returning = "object"应该和形参的object名字一致 ,用来接收目标方法的返回值。
11.4@AfterThrowing用于处理程序中未处理的异常
pointcut / value : 这两个属性的作用相同,都是指定切入点对应的切入表达式。当指定了pointcut属性值后,value属性值 将会被覆盖。
throwing : 返回值形参名,增强处理定义的方法可通过该形参名来访问目标方法中所抛出的异常对象。
12.@Controller
控制层注解
13@CrossOrigin
用来处理跨域请求的注解